【问题标题】:How to run two pieces of codes with waits in between at the same time in python?python - 如何在python中同时运行两条中间有等待的代码?
【发布时间】:2022-01-01 08:09:25
【问题描述】:

我想跑步

import time
number1 = 1
while True:
    number1 = int(number1) + 1
    time.sleep(3)

import time
number2 = 1
while True:
    number2 = int(number2) + 1
    time.sleep(20)

同时在 python 中,我该怎么做呢? 我还是个初学者,如果可以的话,请用更简单的方式解释一下。

子问题:实际代码很少,等待的时间更多,使用多线程还是多处理更好?

子问题 2:在多处理中,我可以运行比我的 cpu 拥有的内核数更多的进程吗?

【问题讨论】:

  • 您可以使用multiprocessingasyncio 或其他并发库,或者只是在循环中,递增number1 然后休眠3 秒递增number2 然后休眠17 秒。
  • 在您给出的最后一个解决方案中,number1 将无法每 3 秒更新一次。
  • 您是否有任何具体原因要同时运行它们而不是一个接一个?
  • 是的,我需要在不同时间从网页中为每个人请求。如果是一个接一个,我得等到第一个完成。
  • 如果我的理解不正确,请纠正我,但是您先请求 number1,然后再请求 number2?我主要是在问,因为我强烈建议不要使用多处理,但是如果没有需要/用于什么的上下文,我不知道什么是最好的。

标签: python loops parallel-processing


【解决方案1】:

您可以使用多处理。

from multiprocessing import Process
import time
def loop_3():
    number1 = 1
    while True:
        number1 = int(number1) + 1
        time.sleep(3)
        print(number1)

def loop_20():
    number2 = 1
    while True:
        number2 = int(number2) + 1
        time.sleep(20)
        print(number2)


Process(target=loop_3).start()
Process(target=loop_20).start()

【讨论】:

  • 我可以创建无限个进程吗?
  • 另外,我可以将Process(target=loop_3).start() 放在一个函数中吗?
  • 当然,你可以把它放在一个函数里
  • 谢谢! 4个字符
  • 另外,实际代码很少,等待的时间更多,是使用多线程还是多处理更好?
【解决方案2】:

我建议使用并发。出于您的目的,看起来一切都“同时”发生(这里是对两者的更深入的解释:What is the difference between concurrency, parallelism and asynchronous methods?)。

您可以通过执行以下操作来实现并发:

def f(num, wait):
  time.sleep(wait)
  return int(num) + 1
  
numbers = [1, 2]
test = [f(num, 3) for num in numbers]

这是我在 typescript 中编写的另一个并发示例,您可以使用:ts example

注意:我会警告不要使用多线程/并行,特别是如果您是 python 新手。它可能会导致很多问题,难以调试/理解,并且如果没有正确实施,通常会影响性能而不是获得收益。

注意 2:如果您愿意创建多个实例并同时运行它们(正如您使用 bat 文件所描述的那样),您可以继续这样做,但这会使您的项目难以分享。

【讨论】:

  • 谢谢!这是迄今为止我最喜欢的解决方案!我认为并发正是我所需要的,我的代码需要时间不是因为它必须处理什么,而是因为它必须等待很多。这是完美的!
  • 很高兴听到,祝你好运。仅供参考,您可能需要一些异步/等待。
  • 感谢您从我身上提取了整个问题,我不太擅长解释我想解释的内容。
猜你喜欢
  • 2020-08-03
  • 2020-05-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-27
  • 2020-10-12
  • 2021-04-04
  • 1970-01-01
相关资源
最近更新 更多