为此
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)