Runtime: work around 1s delay added when using twisted reactor's callLater.
Since wxPython4, using wxReactor from non-main thread was producing
exceptions in wxWidget's C++ code. Then reactor.run() was called from
main thread, and runtime's worker was delegating calls to reactor
with callLater(0, callable).
While this worked perfectly with wxReactor, it did introduce an unexplained
1 second delay to each worker call when using nomal linux reactors
(i.e. without wxPython). As a workaround reactor runs in a thread when using
twisted without wxPython
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# See COPYING file for copyrights details.
from __future__ import absolute_import
import hashlib
class ConnectorBase(object):
chuncksize = 1024*1024
def BlobFromFile(self, filepath, seed):
s = hashlib.new('md5')
s.update(seed)
blobID = self.SeedBlob(seed)
with open(filepath, "rb") as f:
while blobID == s.digest():
chunk = f.read(self.chuncksize)
if len(chunk) == 0:
return blobID
blobID = self.AppendChunkToBlob(chunk, blobID)
s.update(chunk)
raise IOError("Data corrupted during transfer or connection lost")