Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 带WorkerTool模块的多线程_Python_Multithreading_Threadpool_Pool - Fatal编程技术网

Python 带WorkerTool模块的多线程

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 __

大家好

我有一个如上所述的代码,我想使用线程逻辑来创建文件。文件夹编号从范围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 __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()存在