Python 为什么我的蟒蛇3';s打印函数不是线程安全的?
这是我的代码,但屏幕上的输出不是我所期望的Python 为什么我的蟒蛇3';s打印函数不是线程安全的?,python,python-3.x,multithreading,printing,Python,Python 3.x,Multithreading,Printing,这是我的代码,但屏幕上的输出不是我所期望的 import threading import time def foo_1(): for i in range(10): print ("foo_1: ") time.sleep(0.2) def foo_2(): for i in range(10): print("foo_2: ") time.sleep(0.2) t1=threading.Thread(target
import threading
import time
def foo_1():
for i in range(10):
print ("foo_1: ")
time.sleep(0.2)
def foo_2():
for i in range(10):
print("foo_2: ")
time.sleep(0.2)
t1=threading.Thread(target=foo_1)
t2=threading.Thread(target=foo_2)
t1.start()
t2.start()
这是输出,显然某些打印函数在睡眠前没有打印“\n”。我不知道为什么:(
您可以简单地使用锁使其线程安全
import threading
import time
lock = threading.Lock()
def foo_1():
for i in range(10):
with lock:
print ("foo_1: ")
time.sleep(0.2)
def foo_2():
for i in range(10):
with lock:
print("foo_2: ")
time.sleep(0.2)
t1=threading.Thread(target=foo_1)
t2=threading.Thread(target=foo_2)
t1.start()
t2.start()
导入线程
导入时间
lock=threading.lock()
def foo_1():
对于范围(10)内的i:
带锁:
打印(“foo_1:”)
睡眠时间(0.2)
def foo_2():
对于范围(10)内的i:
带锁:
打印(“foo_2:”)
睡眠时间(0.2)
t1=线程。线程(目标=foo_1)
t2=线程。线程(目标=foo_2)
t1.start()
t2.start()
或者,您可以定义自己的线程安全打印功能:
import threading
import time
lock = threading.Lock()
# thread safe print
def sprint(*args, **kwargs):
with lock:
print(*args, **kwargs)
def foo_1():
for i in range(10):
sprint ("foo_1: ")
time.sleep(0.2)
def foo_2():
for i in range(10):
sprint("foo_2: ")
time.sleep(0.2)
t1=threading.Thread(target=foo_1)
t2=threading.Thread(target=foo_2)
t1.start()
t2.start()
导入线程
导入时间
lock=threading.lock()
#线程安全打印
def sprint(*args,**kwargs):
带锁:
打印(*args,**kwargs)
def foo_1():
对于范围(10)内的i:
sprint(“foo_1:”)
睡眠时间(0.2)
def foo_2():
对于范围(10)内的i:
sprint(“foo_2:”)
睡眠时间(0.2)
t1=线程。线程(目标=foo_1)
t2=线程。线程(目标=foo_2)
t1.start()
t2.start()
您只需使用锁即可使其线程安全
import threading
import time
lock = threading.Lock()
def foo_1():
for i in range(10):
with lock:
print ("foo_1: ")
time.sleep(0.2)
def foo_2():
for i in range(10):
with lock:
print("foo_2: ")
time.sleep(0.2)
t1=threading.Thread(target=foo_1)
t2=threading.Thread(target=foo_2)
t1.start()
t2.start()
导入线程
导入时间
lock=threading.lock()
def foo_1():
对于范围(10)内的i:
带锁:
打印(“foo_1:”)
睡眠时间(0.2)
def foo_2():
对于范围(10)内的i:
带锁:
打印(“foo_2:”)
睡眠时间(0.2)
t1=线程。线程(目标=foo_1)
t2=线程。线程(目标=foo_2)
t1.start()
t2.start()
或者,您可以定义自己的线程安全打印功能:
import threading
import time
lock = threading.Lock()
# thread safe print
def sprint(*args, **kwargs):
with lock:
print(*args, **kwargs)
def foo_1():
for i in range(10):
sprint ("foo_1: ")
time.sleep(0.2)
def foo_2():
for i in range(10):
sprint("foo_2: ")
time.sleep(0.2)
t1=threading.Thread(target=foo_1)
t2=threading.Thread(target=foo_2)
t1.start()
t2.start()
导入线程
导入时间
lock=threading.lock()
#线程安全打印
def sprint(*args,**kwargs):
带锁:
打印(*args,**kwargs)
def foo_1():
对于范围(10)内的i:
sprint(“foo_1:”)
睡眠时间(0.2)
def foo_2():
对于范围(10)内的i:
sprint(“foo_2:”)
睡眠时间(0.2)
t1=线程。线程(目标=foo_1)
t2=线程。线程(目标=foo_2)
t1.start()
t2.start()
treading最糟糕的事情可能重复-bug很难复制。我没有成功。treading最糟糕的事情可能重复-bug很难复制。我没有成功。