我想指出一个事实穿线。锁定“使用对象管理语句和上下文来定义同步,因为它们支持对象的上下文管理:lock = threading.Lock() # After: import threading
with lock:
# critical section of code
...access shared resources...
这里,上下文管理机制保证在执行块之前自动获取锁,并在块完成后释放,而不管异常结果如何。
因此,上面Vincent建议的解决方案似乎是在解决一个更复杂的问题,即锁定共享的公共资源,阻止任何其他试图访问该资源的线程(实际上,停止任何试图获取同一锁的线程)。注:A穿线。锁定有两种状态:locked和unlocked,它是在unlocked状态下创建的。在下面,例如,由于只有一个线程可以更新全局变量“count”:
^{pr2}$
我建议使用多处理的另一种解决方案,因为您的两个并行函数基本上是两个独立的进程,不需要访问任何共享资源。在from multiprocessing import Process
import time
def func1():
for j in range (0, 10):
print(str(time.ctime(time.time())) + " 1")
time.sleep(0.5)
def func2():
for j in range (0, 10):
print(str(time.ctime(time.time())) + " 2")
time.sleep(0.5)
if __name__ == '__main__':
print(str(time.ctime(time.time())) + " script started")
p1 = Process(target=func1)
p1.start()
p2 = Process(target=func2)
p2.start()
p1.join()
p2.join()
print (str(time.ctime(time.time())) + " over")