Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/289.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中创建进度计数器_Python - Fatal编程技术网

在并发Python中创建进度计数器

在并发Python中创建进度计数器,python,Python,这基本上是python程序的缩短版本。我外面没有包装器类,我希望里面有一个计数器来跟踪进度(这样我就知道程序什么时候停止)。但是程序(def covertedFile()在访问更改的变量时遇到问题:alreadyProcessedFile和processLength) 我知道并发性在共享状态下可能会有问题,但是如果没有某种程度的共享状态,如何实现计数器??为什么并发函数不能访问它之外的变量 听起来也很奇怪,这个并发版本程序不能处理一个目录下的所有文件(大约5000个)。我想知道程序是否在某些进

这基本上是python程序的缩短版本。我外面没有包装器类,我希望里面有一个计数器来跟踪进度(这样我就知道程序什么时候停止)。但是程序(
def covertedFile()
在访问更改的变量时遇到问题:
alreadyProcessedFile
processLength

我知道并发性在共享状态下可能会有问题,但是如果没有某种程度的共享状态,如何实现计数器??为什么并发函数不能访问它之外的变量



听起来也很奇怪,这个并发版本程序不能处理一个目录下的所有文件(大约5000个)。我想知道程序是否在某些进程仍在运行时关闭。这是可能的吗?

多处理在启动新进程时为每个进程创建内存副本。通过模块级全局文件共享状态不起作用,因为每个进程在分叉进程时都会获得自己的全局文件“快照”。更改一个进程的全局不会神奇地传播到其他进程


如果需要在进程之间共享状态,则需要使用
多处理
提供给您的工具之一。您可以通过
Value
Array
共享c类型,或使用
Manager
共享任意数据类型。有关详细信息和示例,请参见文档中的。

不幸的是,我没有使用
流程,而是使用
,因此如何通过
构造传入额外参数?
from multiprocessing import Process, Pool
from bs4 import BeautifulSoup

alreadyProcessedFile = 0.0
processLength = 0.0

def convertedFile(filePath):

    fileName = os.path.basename(filePath).split('.')[0]

    print("Total: "+str(processLength)+", current: "+str(alreadyProcessedFile)
          + ", percentage: "+ str((alreadyProcessedFile+1.0)/(processLength+1)))

    #business logic

    print("One file is saved at the location: "+r'E:\xxx\SECProject\ProcessedSEC10KFiles\2012QTR1/'+fileName+'-finalDoc.txt')

def getFilePath(path):
    return glob.glob(os.path.join(path, '*.txt'))

if __name__ == '__main__':
    s = r"E:\xxx\SECProject\SEC10KFiles\2012QTR1"
    fileList = getFilePath(s)
    processLength = len(fileList)
    p = Pool(40)
    p.map(convertedFile, fileList)