如何在python线程for循环?



我计划为reddit自动发布编写一个脚本。这是我如何做发布因数的工作。

def run_bot(self):
with open("account_details.json", 'r') as load_json:
load_json = json.loads(load_json.read())

account_count = len(load_json["account_details"])

for account in range(account_count):
username,password,client_id,client_secret,user_agent,posts_path,proxy  = auto_poster.get_accounts(current=account)
post_count = auto_poster.getPosts(posts_path=posts_path)
reddit_login = auto_poster.bot_login(username,password,client_id,client_secret,user_agent,proxy)

for i in range(0,post_count):
try:
print("Posting on: " + self.subreddits[i] + "Title: " + self.post_titles[i])
reddit_login.subreddit(self.subreddits[i]).submit(self.post_titles[i], url=self.post_links[i], nsfw=True)
random_time = random.randint(100,200)
print("Waiting for " + str(random_time) + " seconds")
time.sleep(random_time)
except praw.exceptions.PRAWException as e:
print(e)
pass

然而,我希望所有帐户开始张贴在同一时间。使用上面的代码,它只在第一个完成后发布一个,另一个帐户启动。如何使用线程或多处理实现这一点?我不知道该选哪一个。

我将使用这个模块:

<标题>concurrent.futures h1>
from concurrent.futures import ThreadPoolExecutor

with ThreadPoolExecutor(max_workers=how_many_function_you_will_run_at_same_time) as executor:
executor.submit(function1, arg1, arg2 ...)
executor.submit(function2, arg1, arg2 ...)
...

选择thread或multiprocess,与thread相比,multiprocess更适合需要较大计算量的程序。

与多进程相比,线程适用于不需要复杂计算的程序,并且线程更易于在同一程序内通信和调整变量。

为什么会发生这种情况,想象一下如果你使用多进程,假设每个python程序需要30MB的内存,如果你需要打开30个进程,你需要900MB。

而如果一个程序需要进行大量复杂的计算,则更适合使用多进程,因为这样他可以集中精力在一个进程中进行计算。

但是,有一点需要注意,即ThreadPoolExecutor的max_worker建议小于35(取决于计算机的性能,运行什么代码),否则计算机可能无法运行。

相关内容

  • 没有找到相关文章

最新更新