在这种情况下,Python进程是否需要锁?

为此

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

相关文章

功能概要:(目前已实现功能)公共展示部分:1.网站首页展示...
大体上把Python中的数据类型分为如下几类: Number(数字) ...
开发之前第一步,就是构造整个的项目结构。这就好比作一幅画...
源码编译方式安装Apache首先下载Apache源码压缩包,地址为ht...
前面说完了此项目的创建及数据模型设计的过程。如果未看过,...
python中常用的写爬虫的库有urllib2、requests,对于大多数比...