Python - 每个任务都从 .txt 文件中读取每个名称(多处理)
Python - Every tasks read each names from .txt file (Multiprocessing)
所以我一直在使用 multiprocessing 并最终让它与 multiprocessing 一起工作 - 基本上现在我得到它 运行 所以现在每个任务 运行s 取决于我输入的任务数量.
def main():
user_input = 0
while True:
try:
user_input = int(input(Fore.WHITE + 'How many tasks do you wanna run? [NUMBERS] \n' + Fore.RESET))
except ValueError:
print(Fore.RED + "Stop being stupid" + Fore.RESET)
continue
else:
HowManyThread = user_input
print()
i = 0
jobs = []
for i in range(HowManyThread):
p = multiprocessing.Process(target=info, args=(str(i),))
jobs.append(p)
time.sleep(.5)
p.start()
for p in jobs:
p.join()
sys.exit()
但是我正在查看其他 Whosebug 线程并发现
with open(fname) as f:
content = f.readlines()
# you may also want to remove whitespace characters like `\n` at the end of each line
content = [x.strip() for x in content]
我在 fname 等中有我所有的名字:
巴里
亚历克斯
斯文
米拉
珍妮等...
然而,多处理正在做的是它实际上为每个任务读取相同的内容,我无法真正掌握现在要做什么...
基本上我想做的就是等等...
任务 1 阅读第一行
任务 2 阅读第二行
任务 3 阅读第三行等...
最好的解决方案是什么?
你做不到。在多进程中,每个进程都有自己的 non-shared 状态。
所以每个进程都会要求操作系统打开文件。每个进程都会从头开始读取文件。您可以强制每个进程只处理某些行,但每个进程都需要读取所有行,找到它们的开始位置和结束位置,以计算行数。
你的例子不应该在多进程中完成,而是通过服务器(服务行)和每个多进程向服务器请求一个新行。但这比多进程算法 server-client 多得多。或 'async' 或使用线程(不确定读取是原子的,因此可能会使事情变得更复杂。)
您可以使用将行分配给子进程的进程来执行此操作。如果您使用的是 UNIX 系统,则应查找 os.fork()
和 os.pipe()
.
所以我一直在使用 multiprocessing 并最终让它与 multiprocessing 一起工作 - 基本上现在我得到它 运行 所以现在每个任务 运行s 取决于我输入的任务数量.
def main():
user_input = 0
while True:
try:
user_input = int(input(Fore.WHITE + 'How many tasks do you wanna run? [NUMBERS] \n' + Fore.RESET))
except ValueError:
print(Fore.RED + "Stop being stupid" + Fore.RESET)
continue
else:
HowManyThread = user_input
print()
i = 0
jobs = []
for i in range(HowManyThread):
p = multiprocessing.Process(target=info, args=(str(i),))
jobs.append(p)
time.sleep(.5)
p.start()
for p in jobs:
p.join()
sys.exit()
但是我正在查看其他 Whosebug 线程并发现
with open(fname) as f:
content = f.readlines()
# you may also want to remove whitespace characters like `\n` at the end of each line
content = [x.strip() for x in content]
我在 fname 等中有我所有的名字:
巴里 亚历克斯 斯文 米拉 珍妮等...
然而,多处理正在做的是它实际上为每个任务读取相同的内容,我无法真正掌握现在要做什么...
基本上我想做的就是等等...
任务 1 阅读第一行 任务 2 阅读第二行 任务 3 阅读第三行等...
最好的解决方案是什么?
你做不到。在多进程中,每个进程都有自己的 non-shared 状态。
所以每个进程都会要求操作系统打开文件。每个进程都会从头开始读取文件。您可以强制每个进程只处理某些行,但每个进程都需要读取所有行,找到它们的开始位置和结束位置,以计算行数。
你的例子不应该在多进程中完成,而是通过服务器(服务行)和每个多进程向服务器请求一个新行。但这比多进程算法 server-client 多得多。或 'async' 或使用线程(不确定读取是原子的,因此可能会使事情变得更复杂。)
您可以使用将行分配给子进程的进程来执行此操作。如果您使用的是 UNIX 系统,则应查找 os.fork()
和 os.pipe()
.