Process blocks in the executor
This should eliminate latency when new blocks come in and prevent sessions being dropped whilst they are processed.
This commit is contained in:
parent
ab9d9f7c07
commit
238b9e0285
@ -201,6 +201,7 @@ class BlockProcessor(server.db.DB):
|
|||||||
self.first_caught_up()
|
self.first_caught_up()
|
||||||
|
|
||||||
self.flush(True)
|
self.flush(True)
|
||||||
|
self.logger.info('shut down complete')
|
||||||
|
|
||||||
def shutdown(self):
|
def shutdown(self):
|
||||||
'''Call to shut down the block processor.'''
|
'''Call to shut down the block processor.'''
|
||||||
@ -213,11 +214,16 @@ class BlockProcessor(server.db.DB):
|
|||||||
if self.height == -1:
|
if self.height == -1:
|
||||||
blocks[0] = blocks[0][:self.coin.HEADER_LEN] + bytes(1)
|
blocks[0] = blocks[0][:self.coin.HEADER_LEN] + bytes(1)
|
||||||
|
|
||||||
touched = set()
|
def do_it():
|
||||||
try:
|
|
||||||
for block in blocks:
|
for block in blocks:
|
||||||
|
if self._shutdown:
|
||||||
|
break
|
||||||
self.advance_block(block, touched)
|
self.advance_block(block, touched)
|
||||||
await asyncio.sleep(0) # Yield
|
|
||||||
|
touched = set()
|
||||||
|
loop = asyncio.get_event_loop()
|
||||||
|
try:
|
||||||
|
await loop.run_in_executor(None, do_it)
|
||||||
except ChainReorg:
|
except ChainReorg:
|
||||||
await self.handle_chain_reorg(touched)
|
await self.handle_chain_reorg(touched)
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user