无阻塞方法,无并行性



我正试图创建一个类,该类的方法不能阻止执行(我想它被称为"非阻塞"(,但在给定的时间只能执行其中一个。

假设:

import time
import random
class Foo():
    def do_stuff_a(self):
        print("Start a")
        time.sleep(0.5)
        print("Finished a")
    
    def do_stuff_b(self):
        print("Start b")
        time.sleep(0.5)
        print("Finished b")
def do_other_stuff():
    print("doing other stsuff")
foo = Foo()
for x in range(15):
    time.sleep(0.1)
    # These calls should be non-blocking
    if random.randint(0,1) == 1:
        foo.do_stuff_a()
    else:
        foo.do_stuff_b()
    do_other_stuff()

do_stuff_a和do_stuffb不应该阻塞流,所以do_other_stuff((应该每0.1秒执行一次。此外,如果do_stuff_a和b中的任何一个仍在运行,则应跳过它们(即Foo类的方法不能并行运行,如果有一个正在运行,则只应跳过对其中任何一个的调用(而不是将其放入队列中以备稍后使用(。

有关于如何开始的指针朋友吗?

这就是我所想到的;我需要两个装饰器,一个用于管理方法的线程(工作良好(,另一个用于确保只执行一个方法,并在它正在运行时跳过调用(而不是将其留在队列中(


import time
import random
import threading
def thread(func):
    def wrapper( self, *args, **kwargs):
        th = threading.Thread(target=func,args=(self, *args))
        th.start()
    return wrapper
class Foo():
    def __init__(self):
        self.lock = threading.Lock()

    def non_parallel(fun):
        def wrapper( self, *args, **kwargs):
            
            if self.lock.locked(): return
            self.lock.acquire()
            try:
                fun( self , *args)
            except ValueError as e:
                print (e)
            self.lock.release()
        return wrapper
    @thread
    @non_parallel
    def do_stuff_a(self):
        print("Start an")
        print("Finished an")
       
    
    @thread
    @non_parallel
    def do_stuff_b(self):
        print("Start bn")
        time.sleep(1)
        print("Finished bn")
       
def do_other_stuff():
    print("doing other stsuffn")
foo = Foo()
for x in range(5):
    time.sleep(0.1)
    foo.do_stuff_a()
    foo.do_stuff_b()
    do_other_stuff()

相关内容

  • 没有找到相关文章

最新更新