gpt4 book ai didi

python - 并行线程上的 session ID 问题

转载 作者:行者123 更新时间:2023-11-30 22:26:14 25 4
gpt4 key购买 nike

所以我尝试使用多处理来同时迭代不同文件夹中的文件。我有一个调用并行进程的函数:

from multiprocessing.dummy import Pool

lsFolders = ['Folder1', 'Folder2']

pool = Pool( processes = 6 )

iterateThroughFiles = IterateThroughFiles() # instantiated by call to pool.map()

pool.map( iterateThroughFiles.runProcess, lsFolders )

然后我实现了 IterateThroughFiles 类:

class IterateThroughFiles( object ):

def runProcess( self, folder ):
self.sessionId = uuid.uuid4()
print( self.sessionId ) # Prints a correct sessionId
logAtLevel( "INFO", "Session ID of: "
+ str( self.sessionId )
+ " has been generated for folder: "
+ folder
)

print( self.sessionId ) # Prints only the second generated
# # session id for both threads
print( folder ) # Prints the correct folder

当我生成 sessionId 并直接打印时,sessionId 是正确的,另外 logAtLevel( ) 包装函数记录 sessionId 的正确值。

但是,下一个打印语句仅打印第二个 session ID,显然第一个 sessionId 在线程中被遗忘了。

有谁知道为什么会这样吗?我认为并行运行时,每个线程在它创建的对象及其内存方面是不同的?这是不正确的吗?这与 uuid 生成器有关系吗?

最佳答案

问题是您只生成一个在两个线程中使用的 IterateThroughFiles 实例。相反,您想要类似以下的内容

def factory(folder):
return IterateThroughFiles().runProcess(folder)

并将该工厂函数传递到 map 中。这样您将获得两个实例。

关于python - 并行线程上的 session ID 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47289015/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com