Python 带WorkerTool模块的多线程
大家好 我有一个如上所述的代码,我想使用线程逻辑来创建文件。文件夹编号从范围1开始,即51。在此目录中创建的文本文件名为Python 带WorkerTool模块的多线程,python,multithreading,threadpool,pool,Python,Multithreading,Threadpool,Pool,大家好 我有一个如上所述的代码,我想使用线程逻辑来创建文件。文件夹编号从范围1开始,即51。在此目录中创建的文本文件名为555.txt到833.txt。但是在创建名为52的文件夹后,它会停止,无法创建555.txt到833.txt 它认为它停止是因为 import os import urllib import workerpool from datetime import datetime class DownloadJob(workerpool.Job): def __
555.txt
到833.txt
。但是在创建名为52
的文件夹后,它会停止,无法创建555.txt
到833.txt
它认为它停止是因为
import os
import urllib
import workerpool
from datetime import datetime
class DownloadJob(workerpool.Job):
def __init__(self, fa):
self.fa = fa
def run(self):
f = open(self.fa + '.txt','w')
f.write('Example Note.......')
f.close()
pool = workerpool.WorkerPool(size=5)
def workfile():
range1 = 51
range2 = 102
fam1 = 555
fam2 = 833
ranges = range2 -range1
fams = fam2 -fam1
workname = "Python"
path = os.getcwd()
os.system('mkdir ' + str(workname))
sTime = datetime.now()
for a in range(ranges + 1):
os.chdir(path + '\\' + str(workname))
os.system('mkdir ' + str(range1 + a))
os.chdir(path + '\\' + str(workname) + '\\' + str(range1 + a))
for b in range(fams + 1):
fa = str(fam1 + b)
job = DownloadJob(fa)
pool.put(job)
pool.shutdown()
pool.wait()
print 'Elapsed Time: %s' % (datetime.now() - sTime)
z = open('info.txt','w')
z.write('Elapsed Time: %s' % (datetime.now() - sTime))
z.close()
os.chdir(path + '\\' + str(workname))
tumSure = open('info.txt','w')
tumSure.write('Elapsed All Time: %s' % (datetime.now() - sTime))
tumSure.close()
print 'All Time: %s' % (datetime.now() - sTime)
print 'Workname : %s downloaded.' % (workname)
quit()
workfile()
如何使循环不停地继续?我认为只有在完成池后,才应该关闭池,即在
循环之后,甚至在try…finally
子句中
看起来是这样的:
pool.shutdown()
pool.wait()
这样,池将关闭
a) 只有在完成所有池内推杆且
b) 即使出现异常也会发生,以便完全关闭
如果池中有一个上下文管理器,那么就更简单了。但是AFAICS。
否则,你可以这样做
try:
for a in range(ranges + 1):
os.chdir(path + '\\' + str(workname))
os.system('mkdir ' + str(range1 + a))
os.chdir(path + '\\' + str(workname) + '\\' + str(range1 + a))
for b in range(fams + 1):
fa = str(fam1 + b)
job = DownloadJob(fa)
pool.put(job)
finally:
pool.shutdown()
pool.wait()
但如果你愿意,你可以做
with pool:
for a in range(ranges + 1):
os.chdir(path + '\\' + str(workname))
os.system('mkdir ' + str(range1 + a))
os.chdir(path + '\\' + str(workname) + '\\' + str(range1 + a))
for b in range(fams + 1):
fa = str(fam1 + b)
job = DownloadJob(fa)
pool.put(job)
我认为只有在完成池后才应该关闭池,即在循环之后,甚至在try…finally
子句中
看起来是这样的:
pool.shutdown()
pool.wait()
这样,池将关闭
a) 只有在完成所有池内推杆且
b) 即使出现异常也会发生,以便完全关闭
如果池中有一个上下文管理器,那么就更简单了。但是AFAICS。
否则,你可以这样做
try:
for a in range(ranges + 1):
os.chdir(path + '\\' + str(workname))
os.system('mkdir ' + str(range1 + a))
os.chdir(path + '\\' + str(workname) + '\\' + str(range1 + a))
for b in range(fams + 1):
fa = str(fam1 + b)
job = DownloadJob(fa)
pool.put(job)
finally:
pool.shutdown()
pool.wait()
但如果你愿意,你可以做
with pool:
for a in range(ranges + 1):
os.chdir(path + '\\' + str(workname))
os.system('mkdir ' + str(range1 + a))
os.chdir(path + '\\' + str(workname) + '\\' + str(range1 + a))
for b in range(fams + 1):
fa = str(fam1 + b)
job = DownloadJob(fa)
pool.put(job)
我不知道os.mkdir()存在我不知道os.mkdir()存在