首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python -将线程转换为多处理

Python -将线程转换为多处理
EN

Stack Overflow用户
提问于 2017-09-25 10:44:48
回答 1查看 934关注 0票数 0

因此,在过去的日子里,我一直在试图弄清楚如何开始线程,我终于让它工作!我现在面临的问题是,我希望它们同时运行。我听到了不同的事情,比如吉尔不起作用。有人说它适用于multiprocessing等。然而,我转到这里,看看是否可能,说什么去做呢?

基本上,我的代码现在看起来是这样的:

使用线程编写代码

代码语言:javascript
复制
def start(config):
    NameUrl = config["Url"]
    myNote = config["My-Note"]
    checkoutNames(Nameurl, MyNote)

if __name__ == '__main__':
    with open('config.json', 'r', encoding='UTF-8') as json_data:
        config = json.load(json_data)
    threads = []
    for i, e in enumerate(config):
        threads.append(threading.Thread(target=start, args=(config[i] or e)))

正如您在if __name__ == '__main__':中所看到的,线程现在就在这里。然而,此时它所做的是,它首先做线程1,当它完成时,它变成线程2,并继续这样下去,我的愿望是将它并发/同时,如果这是可能的话?

编辑

代码

代码语言:javascript
复制
if __name__ == '__main__':
    with open('config.json', 'r', encoding='UTF-8') as json_data:
        config = json.load(json_data)
    jobs = []
    for i, e in enumerate(config):
        c = (config[i] or e)
        p = multiprocessing.Process(target=start, args=(c))
        jobs.append(p)
        p.start()

使用上面的代码获得的错误:

代码语言:javascript
复制
[<Process(Process-1, initial)>]
<Process(Process-1, initial)>
{'Email': '123o@gmail.com', 'PersonNumber': '4234', 'ZipCode': '1241234', 'Name': 'Guess', 'LastName': 'TheyKnow'}
[<Process(Process-1, started)>, <Process(Process-2, initial)>]
<Process(Process-2, initial)>
{'Email': 'Hello@hotmail.com', 'PersonNumber': '1234', 'ZipCode': '56431', 'Name': 'Stack', 'LastName': 'Overflow'}
Process Process-1:
Traceback (most recent call last):
  File "C:\Users\AppData\Local\Programs\Python\Python36\lib\multiprocessing\process.py", line 249, in _bootstrap
    self.run()
  File "C:\Users\AppData\Local\Programs\Python\Python36\lib\multiprocessing\process.py", line 93, in run
    self._target(*self._args, **self._kwargs)
TypeError: start() takes 1 positional argument but 16 were given
Process Process-2:
Traceback (most recent call last):
  File "C:\Users\AppData\Local\Programs\Python\Python36\lib\multiprocessing\process.py", line 249, in _bootstrap
    self.run()
  File "C:\Users\AppData\Local\Programs\Python\Python36\lib\multiprocessing\process.py", line 93, in run
    self._target(*self._args, **self._kwargs)
TypeError: start() takes 1 positional argument but 16 were given
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-09-25 11:09:11

我认为您需要修复args参数:

代码语言:javascript
复制
...
jobs = []
for i, e in enumerate(config):
    c = (config[i] or e)
    p = multiprocessing.Process(target=start, args=(c,))
    jobs.append(p)
    p.start()

请注意args参数中使用的语法:

代码语言:javascript
复制
args=(c,))  # <=== (c,) means that we are assigning the tuple (c,) to args
            # which gets translated into start(c)
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46403301

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档