I've been tinkering around with multiprocessing and pyglet a few weeks ago, using a process which imports pyglet after construction like Nathan's example. I have not run into any problems so far. Also, keep in mind that under windows you'll need to add
if __name__ == '__main__': 2012/11/6 Nathan <[email protected]> > I don't understand why this approach wouldn't work in general. The python > multiprocessing module explicitly uses subprocess, not threads. Separate > processes (even if spawned by each other) should each be able to handle > their own OpenGL contexts. > > Perhaps the problem is that multiprocessing is forking the current > process, which probably means that you need to make sure all OpenGL-related > stuff is started _after_ the separate process is running. Why don't you > try something like this and see how it goes? > > import multiprocessing > > def inprocess(): > import pyglet > b = pyglet.graphics.Batch() > > w = pyglet.window.Window() > pyglet.app.run() > > p = multiprocessing.Process(target=inprocess) > p.start() > p.join() > > ~ Nathan > > On Mon, Nov 5, 2012 at 1:25 PM, Tristam MacDonald <[email protected]>wrote: > >> It's a general limitation of OpenGL, that calls to OpenGL can only occur >> from a single thread. There is no easy way to work around that limitation, >> pre OpenGL version 4+. >> >> >> On Mon, Nov 5, 2012 at 3:21 PM, Gabriele Lanaro < >> [email protected]> wrote: >> >>> I've tried several approaches to run pyglet in parallel with the >>> executing code. One (partially) successful solution was to simply run >>> pyglet-related stuff into a mutliprocessing.Process and communicating using >>> a sync primitive such as a Queue. The problem I'm having is that this >>> approach doesn't play nicely with all the drivers, a test code like the >>> following, works nicely on 'radeon' open source drivers, but it doesn't >>> work on proprietary nvidia drivers (the subprocess sort-of crashes at line >>> 6). If I remove the call to Batch (or any other opengl-related call) it >>> works with both video cards/drivers. Do you think there's an explanation >>> for this? I'd prefer avoiding to restrict all references to opengl in just >>> one process the reason is that I basically cache shaders in the main >>> process. I was wondering if there exist some way to prevent this kind of >>> problems. >>> -------------------------- >>> import pyglet >>> import multiprocessing >>> b = pyglet.graphics.Batch() >>> >>> def inprocess(): >>> w = pyglet.window.Window() >>> pyglet.app.run() >>> >>> p = multiprocessing.Process(target=inprocess) >>> p.start() >>> p.join() >>> --------------------------- >>> >>> -- >>> You received this message because you are subscribed to the Google >>> Groups "pyglet-users" group. >>> To view this discussion on the web visit >>> https://groups.google.com/d/msg/pyglet-users/-/SOjRn2XTbF8J. >>> To post to this group, send email to [email protected]. >>> To unsubscribe from this group, send email to >>> [email protected]. >>> For more options, visit this group at >>> http://groups.google.com/group/pyglet-users?hl=en. >>> >> >> >> >> -- >> Tristam MacDonald >> Software Development Engineer, Amazon.com >> http://swiftcoder.wordpress.com/ >> >> -- >> You received this message because you are subscribed to the Google Groups >> "pyglet-users" group. >> To post to this group, send email to [email protected]. >> To unsubscribe from this group, send email to >> [email protected]. >> For more options, visit this group at >> http://groups.google.com/group/pyglet-users?hl=en. >> > > -- > You received this message because you are subscribed to the Google Groups > "pyglet-users" group. > To post to this group, send email to [email protected]. > To unsubscribe from this group, send email to > [email protected]. > For more options, visit this group at > http://groups.google.com/group/pyglet-users?hl=en. > -- You received this message because you are subscribed to the Google Groups "pyglet-users" group. To post to this group, send email to [email protected]. To unsubscribe from this group, send email to [email protected]. For more options, visit this group at http://groups.google.com/group/pyglet-users?hl=en.
