我想使用来自多个线程和模块的共享队列。我有以下Python代码:
# moda.py
import queue
import modb
q = queue.Queue()
def myPut(x):
q.put(x)
def main():
print('moda:', str(id(q)))
modb.go()
q.get()
if __name__ == '__main__':
main()
以及
# modb.py
import moda
import threading
def something():
print('modb:', str(id(moda.q)))
moda.myPut('hi')
def go():
threading.Thread(target = something).start()
something
在线程1上被调用,somethingElse
在线程2上被调用。在这两个方法中,q
的地址是不同的-这就是为什么对get
的调用永远不会返回的原因。我怎样才能避免这种情况?是因为循环导入还是因为多线程?你知道吗
The link奥斯汀·菲利普斯在评论中给出了答案:
因此,
__main__.q
和moda.q
(导入到modb
)是两个不同的对象。你知道吗使其工作的一种方法是创建这样一个独立的主模块并运行它,而不是
moda
:但是,您仍然应该考虑将
q
和其他共享内容放入一个新模块中,然后导入moda
和modb
以避免其他陷阱。你知道吗相关问题 更多 >
编程相关推荐