![](/img/trans.png)
[英]Why is the printing messed up when running multiple threads in python?
[英]Python : printing in multiple threads
我有一个基于Twisted的网络系统的实现。 我注意到当我在一个新线程(而不是主线程)中运行一个函数(它进行一些数学运算并打印结果)时, print
函数会导致Segmentation fault
。 可能吗? 有没有选择避免这种情况?
我的方法,基于Bram Cohen的建议 :
定义全局Lock
变量
from threading import Lock
s_print_lock = Lock()
定义一个用Lock调用print
的函数
def s_print(*a, **b):
"""Thread safe print function"""
with s_print_lock:
print(*a, **b)
在线程中使用s_print
而不是print
。
在线程中打印时需要使用线程锁。 例:
lock = Lock()
lock.acquire() # will block if lock is already held
print("something")
lock.release()
通过这种方式,多个线程不会同时使用资源(在本例中为print)。 使用线程锁就像将注意力集中在获取锁的线程上。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.