【发布时间】:2020-08-11 18:07:16
【问题描述】:
我想将事件订阅/通知与多线程一起使用。听起来它应该在理论上起作用,并且文档不包含任何警告。事件应该是同步的,所以也不能延迟。
但实际上,当我通知主线程时,什么都没有进来:
def run():
logging.config.fileConfig(sys.argv[1])
with bootstrap(sys.argv[1]) as env:
get_current_registry().notify(FooEvent()) # <- works
Thread(target=thread).start() # <- doesn't work
def thread():
get_current_registry().notify(FooEvent())
预计这不会起作用吗?还是我做错了什么?
我也尝试了建议的解决方案。它不会打印预期的事件。
class Foo:
pass
@subscriber(Foo)
def metric_report(event):
print(event)
def run():
with bootstrap(sys.argv[1]) as env:
def foo(env):
try:
with env:
get_current_registry().notify(Foo())
except Exception as e:
print(e)
t = Thread(target=foo, args=(env,))
t.start()
t.join()
【问题讨论】:
标签: python multithreading pyramid