MCPcopy Create free account
hub / github.com/apple/foundationdb / init

Function init

bindings/python/fdb/impl.py:1603–1772  ·  view source on GitHub ↗

Initialize the FDB interface. Consider using open() as a higher-level interface. Keyword arguments: event_model -- the event model to support (default None, also 'gevent')

(event_model=None)

Source from the content-addressed store, hash-verified

1601
1602
1603def init(event_model=None):
1604 """Initialize the FDB interface.
1605
1606 Consider using open() as a higher-level interface.
1607
1608 Keyword arguments:
1609 event_model -- the event model to support (default None, also 'gevent')
1610
1611 """
1612 with _network_thread_reentrant_lock:
1613 global _network_thread
1614
1615 # init should only succeed once; if _network_thread is not
1616 # None, someone has already successfully called init
1617 if _network_thread:
1618 raise FDBError(2000)
1619
1620 try:
1621 class NetworkThread(threading.Thread):
1622 def run(self):
1623 try:
1624 _capi.fdb_run_network()
1625 except FDBError as e:
1626 sys.stderr.write('Unhandled error in FoundationDB network thread: %s\n' % e)
1627 # print('Network stopped')
1628
1629 _network_thread = NetworkThread()
1630 _network_thread.daemon = True
1631 # may not set actual underlying OS thread name
1632 _network_thread.name = "fdb-network-thread"
1633
1634 if event_model is not None:
1635 if event_model == 'gevent':
1636 import gevent
1637
1638 if gevent.__version__[0] != '0':
1639 def nullf():
1640 pass
1641
1642 class ThreadEvent(object):
1643 has_async_ = hasattr(gevent.get_hub().loop, 'async_')
1644 def __init__(self):
1645 if ThreadEvent.has_async_:
1646 self.gevent_async = gevent.get_hub().loop.async_()
1647 else:
1648 self.gevent_async = getattr(gevent.get_hub().loop, 'async')()
1649
1650 self.gevent_async.start(nullf)
1651
1652 def set(self):
1653 self.gevent_async.send()
1654
1655 def wait(self):
1656 gevent.get_hub().wait(self.gevent_async)
1657 else:
1658 # gevent 0.x doesn't have async, so use a pipe. This doesn't work on Windows.
1659 if platform.system() == 'Windows':
1660 raise Exception("The 'gevent' event_model requires gevent 1.0 on Windows.")

Callers 4

init_v13Function · 0.70
openFunction · 0.70
initMethod · 0.50

Calls 4

FDBErrorClass · 0.85
NetworkThreadClass · 0.85
startMethod · 0.45

Tested by 1

initMethod · 0.40