該程序檢查url是否導致404,如果有,它會將用戶名寫入文件。我試圖添加多處理,以便程序運行得更快,因爲有些時候我會用1000行的文本文件輸入文本文件,這需要很長時間。但是,我第一次運行這個程序(當輸出文本文件爲空時),它不會向輸出文本文件寫入任何內容。它只能在第2,3,4 ...次運行時開始寫入輸出文件。程序只在第一個程序後的運行中寫入文件
#program checks twitch accounts in a file.
#writes accounts which aren't taken to another file.
import requests
from multiprocessing import Pool
x = "0"
accounts = open('accounts.txt', 'r')
valid_accounts = open('valid accounts.txt', 'a')
base_url = "https://www.twitch.tv/"
def check(x):
for line in accounts:
url = base_url + line
twitch_r = requests.get(url)
if twitch_r.status_code == 404:
valid_accounts.write(line + "\n")
def Main():
p = Pool(processes=25)
p.imap(check, x)
accounts.close()
valid_accounts.close()
if __name__ == "__main__":
Main()
使用John的解決方案後,該程序按預期工作。在我改變任何東西之前,它正在Windows上的第一個之後運行。我同意你的看法,我應該首先閱讀這些句子,然後將其發送給池中的參數,但我不知道如何使它成爲每個進程都有不同的參數。如果我爲文件中的每一行創建for循環,我將使用line作爲我的pool函數的參數,所以如果我沒有錯,每個進程都會使用相同的參數。我使用了imap,因爲我讀到imap不返回列表(?)。 404是對的。 – abc12333333
@ abc12333333如果您要使用map並使其成爲「每個進程採用不同的參數」,請查看我的解決方案。這正是它所做的。 map從'lines'獲取一個值,然後將其映射到'results'中,然後將'return'存儲在'results'中。這是並行完成的 – hansaplast
@ abc12333333您的其他問題我添加到我的答案。關於404:我現在改變了它,所以它做你想做的。請嘗試我上面的解決方案,它應該工作,它在我的機器上工作 – hansaplast