为此
from multiprocessing import Process,Queue,Pool
class QueueFun():
def writing_queue(self,work_tasks):
count = 0
for i in range(0,10):
count = count + 1
print("Writing to queue")
if count == 3 :
break
work_tasks.put(1)
def read_queue(self,work_tasks):
for i in range(0,2):
print('Reading from queue')
work_tasks.get()
if __name__ == '__main__':
q = QueueFun()
work_tasks = Queue()
write_process = Process(target=q.writing_queue,args=(work_tasks,))
write_process.start()
processes = []
for i in range(0,1):
processes.append(Process(target=q.read_queue,)))
for p in processes:
p.start()
write_process.join()
for p in processes:
p.join()
打印:
Writing to queue
Writing to queue
Writing to queue
Reading from queue
Reading from queue
这似乎是正确的,因为一旦计数达到3,它就会跳出循环。但是我不是100%确定计数代码是否是线程安全的。我应该使用锁来确保线程安全吗?
因此,修改QueueFun以使用lock
:
class QueueFun():
def __init__(self):
self.lock = Lock()
def writing_queue(self,10):
self.lock.acquire()
count = count + 1
self.lock.release()
print("Writing to queue")
if count == 3 :
break
work_tasks.put(1)
锁定文档:https://docs.python.org/2/library/multiprocessing.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。