Python 从列表中创建重复的Gevent线程时出现问题

Python 从列表中创建重复的Gevent线程时出现问题,python,recursion,gevent,Python,Recursion,Gevent,我正在努力使用正确的语法从列表中创建Gevent线程。我希望这些线程以特定的节奏无限重复,除非停止。只有第一个列表项运行。从文档中,我认为gevent.sleep导致进程屈服于另一个线程。我希望规则1每秒钟重复一次,规则2每两秒钟重复一次。我错过了什么?先谢谢你 import gevent import datetime def repeat(name: str, timer: float): while True: print(name + ': ' + str(da

我正在努力使用正确的语法从列表中创建Gevent线程。我希望这些线程以特定的节奏无限重复,除非停止。只有第一个列表项运行。从文档中,我认为gevent.sleep导致进程屈服于另一个线程。我希望规则1每秒钟重复一次,规则2每两秒钟重复一次。我错过了什么?先谢谢你

import gevent
import datetime

def repeat(name: str, timer: float):
    while True:
        print(name + ': ' + str(datetime.datetime.now()))
        gevent.sleep(timer)

threads = []
rules = [
    {'name': 'rule1', 'timer': 1.0},
    {'name': 'rule2', 'timer': 2.0}
]

for rule in rules:
    threads.append(gevent.spawn(repeat(rule['name'], rule['timer'])))

gevent.joinall(threads)
当我为规则1/2创建单独的进程并将它们添加到线程中时,它会像预期的那样工作。问题似乎出现在“规则中的规则”部分,但我不确定如何让它超越第一条规则


我的问题与的海报相同,但他们的解决方案是在循环中包含一个gevent.sleep函数,我已经有了…

正在研究我的解决方案与我上面链接的解决方案之间的差异。对于同一条船上的任何人来说,这都与课程有关!我将repeat函数移到类中,实例化了两个副本,并将它们添加到列表中,结果成功了

import gevent
import datetime


class Rule:
    def __init__(self, name: str, timer: float):
        self.name = name
        self.timer = timer

    def repeat(self):
        name = self.name
        timer = self.timer
        while True:
            print(name + ': ' + str(datetime.datetime.now()))
            gevent.sleep(timer)


rule1 = Rule('rule1', 2.0)
rule2 = Rule('rule2', 1.0)
testlist = [rule1, rule2]
threads = []

for rule in testlist:
    threads.append(gevent.spawn(rule.repeat))

gevent.joinall(threads)