Python中多线程的酸洗
我有一个多线程的python程序。每个线程检测事件,我想将其存储在某个地方,以便再次读取它们(用于测试)。现在,我使用Pickle来输出事件,每个线程输出到不同的文件。理想情况下,我只会使用一个输出文件,所有线程都会写入该文件,但当我尝试这样做时,看起来各个线程都试图同时写入它们的输出,并且没有正确地进行pickle处理。有办法做到这一点吗?是的,使用对象。Python中多线程的酸洗,python,pickle,Python,Pickle,我有一个多线程的python程序。每个线程检测事件,我想将其存储在某个地方,以便再次读取它们(用于测试)。现在,我使用Pickle来输出事件,每个线程输出到不同的文件。理想情况下,我只会使用一个输出文件,所有线程都会写入该文件,但当我尝试这样做时,看起来各个线程都试图同时写入它们的输出,并且没有正确地进行pickle处理。有办法做到这一点吗?是的,使用对象。 在创建所有线程之前创建一个锁,将其交给负责保存/酸洗项目的方法,此方法应在写入文件之前获取锁,并在写入文件之后释放锁。您可以创建一个锁,并
在创建所有线程之前创建一个锁,将其交给负责保存/酸洗项目的方法,此方法应在写入文件之前获取锁,并在写入文件之后释放锁。您可以创建一个锁,并在每次调用
pickle.dump()时获取/释放锁
模块的处理程序中内置了一个Rlock
。因此,您可以像平常一样记录日志(只需创建一个处理程序来记录到一个文件)。似乎是一个使用日志的好地方
- 让所有事件检测线程将项目放在共享队列上
- 创建另一个线程以从队列中获取项目,并从此线程中写入/pickle/任何内容
import threading
import pickle
picke_lock = threading.Lock()
def do(s):
picke_lock.acquire()
try:
ps = pickle.dumps(s)
finally:
picke_lock.release()
return ps
t1 = threading.Thread(target=do, args =("foo",))
t2 = threading.Thread(target=do, args =("bar",))
p1 = t1.start()
p2 = t2.start()
inpt = raw_input('type anything and click enter... ')