2013-07-06 69 views
0

我需要做到这一点,而打印到标准输出:
何时加锁以进行多线程和多处理?

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

对于多线程和多进程。
此外,只需从全局文件或全局变量的值中读取就可以完成这项工作吗? PS:我在python 2.7中做多线程和多处理。

回答

1

可以简化到

with lock: 
    print(something) 

但是,是的,你需要避免打印到由不同的线程混合。

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

+0

从全局文件或变量读取什么?我也做同样的多处理? –

+0

@sashasami我补充说 – JBernardo

+0

改变状态是什么意思?如果differenet线程只是使用全局文件来运行os命令,例如:运行一个像python test.py _myoutput standard_output命令,这里test.py只是比较两个文件字符character.test.py和standard_output是全局文件? ?如果线程使用不同文件指针读取文件? –

0

由于GIL,Python的打印是线程安全的,您不会因多线程打印而导致Python的内部状态。

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

+1

多进程呢? –

+1

打印不完全是线程安全的(即使在CPython中也是如此)。如果您打印多个参数,它可能会交错。 – JBernardo

+0

'Python'没有GIL,只有cPython实现,所以第一行不适用于pypy,jython或ironpython ... – mata