twisted - 工厂对象线程安全吗?
twisted - is Factory object thread safe?
以下代码监听2个端口,当有消息时修改一个全局的dict对象。还有一个定时器也会修改字典。
d = {}
class x(Protocol):
def dataReceived(self, data):
# according to data call x's function
self.f()
def f(self):
global d
d['x'] = 'x'
class y(Protocol):
def dataReceived(self, data):
# according to data call y's function
self.f()
def f(self):
global d
d['y'] = 'y'
def modify_d():
global d
for k in d.keys():
if d[k] == 'whatever':
del d[k]
reactor.listenTCP(8880, x())
reactor.listenTCP(8881, y())
lc = task.LoopingCall(modify_d)
lc.start(300)
reactor.run()
访问d的时候需要加锁吗?
它不是线程安全的,但没关系。你不需要锁。 Twisted 在同一个 I/O 主线程中运行所有回调(除了涉及 API 的那些特别提到线程的回调),因此您不必担心多个事情 运行同时
以下代码监听2个端口,当有消息时修改一个全局的dict对象。还有一个定时器也会修改字典。
d = {}
class x(Protocol):
def dataReceived(self, data):
# according to data call x's function
self.f()
def f(self):
global d
d['x'] = 'x'
class y(Protocol):
def dataReceived(self, data):
# according to data call y's function
self.f()
def f(self):
global d
d['y'] = 'y'
def modify_d():
global d
for k in d.keys():
if d[k] == 'whatever':
del d[k]
reactor.listenTCP(8880, x())
reactor.listenTCP(8881, y())
lc = task.LoopingCall(modify_d)
lc.start(300)
reactor.run()
访问d的时候需要加锁吗?
它不是线程安全的,但没关系。你不需要锁。 Twisted 在同一个 I/O 主线程中运行所有回调(除了涉及 API 的那些特别提到线程的回调),因此您不必担心多个事情 运行同时