因此,在過去的這些日子裏,我一直在試圖弄清楚如何開始接觸線程,並最終實現它的工作。我現在面臨的問題是我希望他們同時運行。我聽到不同的事情,如GIL不會工作。有人說,它可以與multiprocessing
等等。但我轉過來看看它是否有可能和說什麼這樣做?Python - 將線程轉換爲多處理器
基本上我的代碼看起來現在是這樣的:
代碼與線程
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並繼續這樣做,如果甚至有可能,我的願望是將它同時/同時轉換爲線程?
編輯
CODE
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()
錯誤IAM與上面的代碼獲得:
[<Process(Process-1, initial)>]
<Process(Process-1, initial)>
{'Email': '[email protected]', 'PersonNumber': '4234', 'ZipCode': '1241234', 'Name': 'Guess', 'LastName': 'TheyKnow'}
[<Process(Process-1, started)>, <Process(Process-2, initial)>]
<Process(Process-2, initial)>
{'Email': '[email protected]', '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
是,多重同時工作,只要你的CPU有核心來處理它。嘗試使用'import multiprocessing'和'multiprocessing.Process',看看你能否得到它的工作。 – quamrana
如果您的實際工作歸結爲使用'requests'(或等效)來獲取數據,那麼您應該對GIL沒有任何問題。 GIL隻影響進行實際計算的CPU密集型代碼。你正在解決什麼具體問題? – user4815162342
@quamrana現在唯一的問題是將'''threads.append(threading.Thread(target = start,args =(config [i] or e)))''''轉換爲多處理。你有什麼想法嗎?它只是改變threading.Thread到'''multiprocessing.Process'''? – WeInThis