什么时候把锁用于多线程和多处理?

时间:2013-07-06 16:05:10

标签: python multithreading python-2.7 multiprocessing

打印到标准输出时是否需要执行此操作:

   `lock.acquire()`
    #printing to standard output
    lock.release()

对于多线程和多进程 这也必须在从全局文件或全局变量值读取时才能完成?

PS:我在python 2.7中进行多线程和多处理。

2 个答案:

答案 0 :(得分:1)

你可以简化为

with lock:
    print(something)

但是,是的,你需要避免各种线程混合打印。

使用只读变量时,您不需要锁定。在阅读文件时(因为你正在改变状态),你需要。

答案 1 :(得分:0)

由于GIL,Python的打印是线程安全的,你不会通过从多个线程打印而导致Python的内部状态。

但是,如果要确保多个打印报表将所有打印件以逻辑方式分组,则需要确保以正确的顺序打印内容。您发现的一种方法是使用锁定,另一种IMO更简单的方法是构建一个包含需要一起打印的所有内容的字符串。