【发布时间】:2015-02-09 13:36:19
【问题描述】:
我测试了我的代码输出并对其进行了排序,但我没有预期的 0-1999,缺少行。我的代码线程不安全吗?请建议如何在我的代码中添加线程锁,我发现我的 except all 没有抛出任何错误,对吗?谢谢
import time, threading, random
class MyThreadWithArgs(threading.Thread):
def __init__(self, string):
threading.Thread.__init__(self)
self.string = string
def run(self):
try:
fo = open("foo.np2", "a")
fo.write( self.string )
fo.write( '\n' )
time.sleep(random.uniform(0.1, 0.9))
fo.close()
except:
print ("error logging " + self.string)
ttl_threads = 2000
for i in range(ttl_threads):
t = MyThreadWithArgs(string = str(i))
t.start()
【问题讨论】:
-
except all在 Python 中没有任何特殊意义,如果必须进入except块,解释器会卡住它。要捕获所有异常,请使用普通的except。 -
这是您的实际代码吗?
ttl_threads = 2000 for i in range(ttl_threads):在我看来不是有效的语法。 -
@Kevin 分开两行,固定
-
使用
with open(...) as...打开文件。如果您的 try 块中有错误,fo将不会被关闭。 -
当我运行你的代码时,我得到一个“打开的文件太多”的异常。也许您可以在主线程中打开文件一次,这样您的其他数千个线程就不必自己做。
标签: python multithreading