Python:以多线程打印

时间:2016-11-01 08:06:49

标签: python python-2.7 thread-safety twisted

我有一个基于Twisted的网络系统的实现。我注意到当我在一个新线程中运行一个函数(进行一些数学运算并打印结果)而不是在主线程中时,print函数会导致Segmentation fault。可能吗?有没有选择避免这种情况?

2 个答案:

答案 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