很抱歉问这个问题作为一个新的python初学者,我有一个工作的python程序要转换为多处理或多线程,这是工作py的结构:
class XMLToJson():
def __init__(self, region=None, flow=None, path=None, output=None):
def run(self):
def run_from_cmd():
XMLToJson().run()
if __name__ == '__main__':
XMLToJson().run()
如果有人能告诉我如何进行转换,将不胜感激。
谢谢。
附言
以下是我正在考虑如何适应它的框架:
from threading import Thread, current_thread, Lock
import time
def worker(l):
while True:
l.acquire()
print ('in worker:' + str(current_thread()))
l.release()
time.sleep(0.5)
if __name__ == '__main__':
l = Lock()
print ('in main: ' + str(current_thread()))
threads = [Thread(target=worker, args=[l]) for i in range(5)]
for t in threads:
t.start()
for t in threads:
t.join()
我将原始工作程序从 run(( 修改为 main_process((,并将目标从 worker 设置为 main_process,
if __name__ == '__main__':
l = Lock()
print ('in main: ' + str(current_thread()))
threads = [Thread(target=main_process, args=[l]) for i in range(5)]
for t in threads:
t.start()
for t in threads:
t.join()
但是程序甚至没有通过编译,在 target=main_process 中出错。
谢谢。
你的问题缺乏相当多的细节。你的程序在做什么?为什么要多进程/线程?您的输入/输出是什么?多进程/多线程有什么?
如果您拥有的是执行input => transform => output
和终止的脚本,则多处理/线程只是同时处理多组输入以节省时间的一种方式。在这种情况下,您可以使用每组输入多次调用脚本,或者将多输入传递给多线程脚本的单个实例,例如binge
库(pip install binge
(来处理多处理:
from binge import B
result = B(worker, n=5)(....)
其中worker
是你的转换函数,n 是它应该发生的次数,....
你的输入被发送到 5 个并行工作线程实例 - 请注意,如果你有 n=5,那么你的输入应该是长度 5(分布在工作线程上(,或者 1(给每个工作线程相同(。
CF:狂欢文档