使用函数作为函数中的参数,该函数本应在线程中 运行 return

Using a fucntion as a parameter in a function that is meant to be run in a thread cant return

我正在尝试从线程调用函数。线程函数在线程的主函数调用中将一个函数作为参数。

 Process Process-1:
Traceback (most recent call last):
  File "/usr/lib/python3.8/multiprocessing/process.py", line 315, in _bootstrap
    self.run()
  File "/usr/lib/python3.8/multiprocessing/process.py", line 108, in run
    self._target(*self._args, **self._kwargs)
TypeError: 'dict' object is not callable

以上是我收到的错误。当我 运行 它不在线程中时,即 request_() 而不是 request() 可以工作,但由于某种原因,当在线程中使用时它不能 return 值正确。此外,如果我删除 req() 中的 return 语句,它会在线程中工作。但我想将函数的 returned 值用作主线程函数中的参数。任何帮助表示赞赏:)

def req():
        r = requests.get('http://url')
        return json.loads(r.content)   
    
    class limiter:
    
    
        def __init__(self, interval, allowed):
            if allowed < 1:
                exit()
            self.connections_ = 0
            self.time_created_ = time.time()
            self.request_interval_ = interval
            self.requests_allowed = allowed
    
        
    
        def request_(self, function):
            res = None
            if time.time() < (self.time_created_ + self.request_interval_):
                if self.connections_ < self.requests_allowed:
                    self.connections_ += 1
                    res = function()
                else:
                    while self.connections_ > self.requests_allowed:
                        if time.time() > (self.time_created_ + self.request_interval_):
                           break 
                        continue
                    self.connections_ += 1
                    res = function()
            
            if time.time() > (self.time_created_ + self.request_interval_):
                self.connections_ = 0
                self.time_created_ = time.time()
            return res
            
    
        
        def request(self, function):
            p1 = Process(target=self.request_(function))
            p1.start()
            p1.join()
    
    l = limiter(10, 10)
    print(l.request(req))

您将方法的结果作为进程目标而不是方法本身传递。

您想做的事情:

p1 = Process(target=self.request_, args=(function,))