Skip to content

Instantly share code, notes, and snippets.

@zorkian
Created April 22, 2018 20:45
Show Gist options
  • Save zorkian/824e86d0d7f001965f62dc8ae7ad28db to your computer and use it in GitHub Desktop.
Save zorkian/824e86d0d7f001965f62dc8ae7ad28db to your computer and use it in GitHub Desktop.
#
# Demonstrate fdb blocking main thread when the network thread is started.
#
import time
import gevent
import gevent.monkey
gevent.monkey.patch_all() # Works if: (thread=False)
import fdb
fdb.api_version(510)
DB = None
@fdb.transactional
def write_time(tr):
tr['now'] = bytes(time.time())
@fdb.transactional
def read_time(tr):
return tr['now']
def get_db():
global DB
if DB is not None:
return DB
# Doesn't matter whether we use event_model="gevent" or None
DB = fdb.open(event_model="gevent")
return DB
def writer():
while True:
print 'Writer!'
write_time(get_db())
time.sleep(1)
def reader():
while True:
print 'Reader!'
time.sleep(1)
print read_time(get_db())
gevent.spawn(writer)
gevent.spawn(reader)
gevent.sleep(5)
@zorkian
Copy link
Author

zorkian commented Apr 22, 2018

Expected output:

Writer!
Reader!
Writer!
1524429808.49
Reader!
Writer!
1524429809.5
Reader!
Writer!
1524429810.5
Reader!
Writer!
1524429811.5
Reader!

When network thread blocks main thread, output is:

Writer!
Reader!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment