考虑一下代码
def proc1():
#do something
def proc2():
#do something else
f1 = open("log1","w")
f2 = open("log2","w")
sys.stdout = f1
p1 = threading.Thread(target = proc1)
p1.start()
sys.stdout = f2
p2 = threading.Thread(target = proc2)
p2.start()
p1.join()
p2.join()
当我运行这个,什么都没有被记录,是什么问题,任何基本的错误??你知道吗
我会给你一个建议。如果要保存
sys.stdout
,请在以下时间之前保存:save_stdout = sys.stdout
更换后系统标准输出,可以使用
sys.stdout = save_stdout
撤消更改。现在,我们来看看代码。当txt文件打开时,你看不到任何结果。因此,请关闭文件并观看:您可以关闭主脚本中的文件,也可以关闭函数proc1和proc2中的文件。你知道吗
问题可能是python在线程之间共享模块。所以
sys
模块是p1
和p2
中的相同的sys模块。当您将sys.stdout
设置为f2
时,两个线程都将写入该线程,而不是它们自己的线程。我可以想象所有的东西都被写入了log2
,除了在proc1
中发生的任何事情,在您启动is之后,在python将sys.stdout
设置为f2
之前。你知道吗什么会更。。。通常的方法是将文件句柄传递给线程,而不会使事情变得更复杂:
这应该很管用。你知道吗
我还建议您将所有初始化内容(打开文件句柄、启动线程等)放入函数中。叫它
main
什么的。然后,您可以通过将以下内容放在文件末尾来启动此函数:这样,如果您想切换到http://docs.python.org/2/library/multiprocessing.html库就容易多了(如果您要做的事情是在python的GIL中相互阻塞,并且您实际上需要单独的进程,而不仅仅是线程)。你知道吗
相关问题 更多 >
编程相关推荐