Cooperative + Preemptive Concurrency
I've just uploaded Fibra 2 to the cheeseshop. Fibra 2 includes the promised non-blocking plugin, which allows a generator based task to momentarily run in a seperate thread.
import fibra
import fibra.plugins.nonblock
import fibra.plugins.sleep
import time
def stuff():
yield fibra.plugins.nonblock.WillBlock()
print 'I am running inside a thread.'
time.sleep(2)
print 'I am still running inside a thread.'
time.sleep(1)
print 'I am exiting the thread, going back into cooperative mode.'
yield None
for i in xrange(3):
print 'I am running cooperatively too.'
yield 1
def other_stuff():
for i in xrange(5):
print 'I am running cooperatively.'
yield 1
s = fibra.Schedule()
s.register_plugin(fibra.plugins.sleep.SleepPlugin())
s.register_plugin(fibra.plugins.nonblock.NonBlockPlugin())
s.install(stuff())
s.install(other_stuff())
while s.tick(): pass
5 comments:
Is this more similar to Erlang or stackless?
I haven't used Erlang, and have only had a cursory glance over stackless, so I can't really answer that question.
However, I can say that I have been inspired what I've read about these other technologies.
The Home Page link on Cheeseshop is dead unfortunately.
Oops. Fixed.
The "Fibra 2" link at the top of this page is broken. It links to http://cheeseshop.python.org/pypi/fibra/2, which says "Not Found".
Post a Comment