我有一个基于Twisted的网络系统的实现。我注意到当我在一个新线程中运行一个函数(进行一些数学运算并打印结果)而不是在主线程中时,print
函数会导致Segmentation fault
。可能吗?有没有选择避免这种情况?
答案 0 :(得分:0)
在线程中打印内容时,需要使用线程锁。 例如:
lock = Lock()
lock.acquire() # will block if lock is already held
print("something")
lock.release()
通过这种方式,多个线程不会同时使用资源(在本例中为print)。 使用线程锁就像将注意力集中在获取锁的线程上。
答案 1 :(得分:0)
我的方法,基于Bram Cohen's suggestion:
定义全局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
。