我有一个用 python 编写的程序,它读取 4 个输入文本文件并将它们全部写入一个名为的列表,该列表ListOutput是我的程序中使用的 4 个进程之间的共享内存(我使用了 4 个进程,因此我的程序运行得更快!)
我还有一个名为的共享内存变量processedFiles,它存储任何进程已读取的输入文件的名称,因此当前进程不会再次读取它们(我使用了锁,因此进程不会processedFiles同时检查内部文件是否存在时间)。
当我只使用一个进程时,我的程序运行得更快(7 毫秒)——我的计算机有 8 个内核。为什么是这样?
import glob
from multiprocessing import Process, Manager,Lock
import timeit
import os
os.chdir("files")
# Define a function for the Processes
def print_content(ProcessName,processedFiles,ListOutput,lock):
for file in glob.glob("*.txt"):
newfile=0
lock.acquire()
print "\n Current Process:",ProcessName
if file not in processedFiles:
print "\n", file, " not in ", processedFiles," for ",ProcessName
processedFiles.append(file)
newfile=1 #it is a new file
lock.release()
#if it is a new file …Run Code Online (Sandbox Code Playgroud) 我有一个程序,它读取一些输入文本文件并将它们全部写入一个名为的列表中ListOutput,该列表是我的程序中使用的两个进程之间的共享内存(我使用了两个进程,因此我的程序运行得更快!)我还有一个共享内存变量调用processedFiles它存储任何进程已读取的输入文件的名称,因此当前进程不会再次读取它们!
确保两个进程不会同时检查“processedFiles”(例如在开始时,它们可能同时得出“processedFiles”为空的结论,因此它们读取相同文件),因此,我Lock在检查部分周围添加了一个,processedFiles以便一个进程应该在另一个进程签入该部分之前完成并释放锁定的部分!
我的问题是该Lock功能似乎不起作用,当我ProcessName在锁定部分内打印电流时,它表明两个进程都在锁定部分内。我不知道我的代码有什么问题?(请参阅下面的输出。)
由于我的主程序不仅是关于读取输入文本文件并将它们打印在列表中,而且在将它们打印到列表之前它必须对输入文件进行非常复杂的操作,我应该使用Pool而不是,Process为什么?
代码:
import glob
from multiprocessing import Process, Manager
from threading import *
import timeit
import os
os.chdir("files")
def print_content(ProcessName,processedFiles,ListOutput,lock):
for file in glob.glob("*.txt"):
newfile=0
lock.acquire()
print "\n Current Process:",ProcessName
if file not in processedFiles:
print "\n", file, " not in ", processedFiles," for ",ProcessName
processedFiles.append(file)
newfile=1#it is a new file
lock.release()
#if it is a new file
if newfile==1:
f …Run Code Online (Sandbox Code Playgroud) 如果我有两个名为test1.py和test2.py的 python程序,如何在终端中并行运行它们?是否
python test1.py|python test2.pyRun Code Online (Sandbox Code Playgroud)
去做?