Python Executor - Passing function with argument as argument(Python Executor-以参数为参数传递函数)
本文介绍了Python Executor-以参数为参数传递函数的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我的目标是创建一个可以用来度量另一个函数的执行和资源使用情况的函数。通过教程,我已经使用Python的ThreadPoolExecutor创建了以下代码:
from resource import *
from time import sleep
from concurrent.futures import ThreadPoolExecutor
class MemoryMonitor:
def __init__(self):
self.keep_measuring = True
def measure_usage(self):
max_usage = 0
u_run_time = 0
s_run_time = 0
while self.keep_measuring:
max_usage = max(max_usage, getrusage(RUSAGE_SELF).ru_maxrss)
u_run_time = max(u_run_time, getrusage(RUSAGE_SELF).ru_utime)
s_run_time = max(s_run_time, getrusage(RUSAGE_SELF).ru_stime)
sleep(0.1) # run this loop every 0.1 seconds
return [max_usage, u_run_time, s_run_time]
def execute(function):
with ThreadPoolExecutor() as executor:
monitor = MemoryMonitor()
stats_thread = executor.submit(monitor.measure_usage)
try:
fn_thread = executor.submit(function)
result = fn_thread.result()
print("print result")
print(result)
print("print result type")
print(type(result))
finally:
monitor.keep_measuring = False
stats = stats_thread.result()
print(stats)
return result
def foo():
i = 0
while i < 3:
print("foo")
i+=1
return 1
def bar(x):
while x < 3:
print("foobar")
x+=1
return 1
var = execute(foo)
print("Var = " + str(var))
var = execute(bar(0))
print("Var = " + str(var))
如果我将函数foo作为参数传递给函数Execute,它将打印正确的结果并返回foo返回的值。
如果我以相同的方式传递函数bar,但bar本身需要参数,则该函数运行(打印3次),然后收到以下错误:
result = self.fn(*self.args, **self.kwargs)
TypeError: 'int' object is not callable
经过一些测试后,如果函数本身需要参数,那么我遇到困难的地方似乎是将函数作为参数传递。根据我对ThreadPoolExecutor的理解,fn_线程对象封装了提交的函数的执行。Result对象应该只保留执行的结果--这不能处理传递带有参数的函数的问题吗?
推荐答案
您正在提交
bar(0)
而不是
bar, 0
为澄清起见,请查看提交人的签名:
提交(fn,*args,**kwargs)
的结果
bar(0)
是一个整数,执行器无法调用该整数,因为如错误消息所示,该整数不可‘Callable’。
这篇关于Python Executor-以参数为参数传递函数的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
沃梦达教程
本文标题为:Python Executor-以参数为参数传递函数
基础教程推荐
猜你喜欢
- Python 的 List 是如何实现的? 2022-01-01
- 使 Python 脚本在 Windows 上运行而不指定“.py";延期 2022-01-01
- 哪些 Python 包提供独立的事件系统? 2022-01-01
- 合并具有多索引的两个数据帧 2022-01-01
- 如何在 Python 中检测文件是否为二进制(非文本)文 2022-01-01
- 将 YAML 文件转换为 python dict 2022-01-01
- 症状类型错误:无法确定关系的真值 2022-01-01
- 如何在Python中绘制多元函数? 2022-01-01
- 使用Python匹配Stata加权xtil命令的确定方法? 2022-01-01
- 使用 Google App Engine (Python) 将文件上传到 Google Cloud Storage 2022-01-01