我必须在python中执行一个程序,该程序需要执行一段时间,然后(无论在何处执行)它必须将信息转储到文件中,关闭文件,然后退出。
在JavaScript中,此行为等同于使用setTimeout(func, 1000000)
其第一个参数(func)将是具有退出代码的函数的指针,而其第二个参数将是程序可用的时间的用法。
我知道如何用C制作这个程序(使用SO信号),但是使用python
在实践中,计时器可能是您要做的最简单的方法。
此代码将执行以下操作:
===
from threading import Timer
def twoArgs(arg1,arg2):
print arg1
print arg2
print ""
def nArgs(*args):
for each in args:
print each
#arguments:
#how long to wait (in seconds),
#what function to call,
#what gets passed in
r = Timer(1.0, twoArgs, ("arg1","arg2"))
s = Timer(2.0, nArgs, ("OWLS","OWLS","OWLS"))
r.start()
s.start()
===
上面的代码很可能会解决您的问题。
但!还有另一种方法,不使用多线程。它的工作方式更像单线程的Javascript。
对于此单线程版本,您需要做的就是将函数及其参数存储在一个对象中,以及应该运行该函数的时间。
一旦有了包含函数调用和超时的对象,只需定期检查函数是否准备就绪即可执行。
正确的方法是使优先级队列存储我们将来要运行的所有功能,如下面的代码所示。
就像在Javascript中一样,这种方法不能保证该函数将完全按时运行。运行时间很长的功能将延迟其后的功能。但是,它确实保证了函数将 不早
于其超时运行。
此代码将执行以下操作:
===
from datetime import datetime, timedelta
import heapq
# just holds a function, its arguments, and when we want it to execute.
class TimeoutFunction:
def __init__(self, function, timeout, *args):
self.function = function
self.args = args
self.startTime = datetime.now() + timedelta(0,0,0,timeout)
def execute(self):
self.function(*self.args)
# A "todo" list for all the TimeoutFunctions we want to execute in the future
# They are sorted in the order they should be executed, thanks to heapq
class TodoList:
def __init__(self):
self.todo = []
def addToList(self, tFunction):
heapq.heappush(self.todo, (tFunction.startTime, tFunction))
def executeReadyFunctions(self):
if len(self.todo) > 0:
tFunction = heapq.heappop(self.todo)[1]
while tFunction and datetime.now() > tFunction.startTime:
#execute all the functions that are ready
tFunction.execute()
if len(self.todo) > 0:
tFunction = heapq.heappop(self.todo)[1]
else:
tFunction = None
if tFunction:
#this one's not ready yet, push it back on
heapq.heappush(self.todo, (tFunction.startTime, tFunction))
def singleArgFunction(x):
print str(x)
def multiArgFunction(x, y):
#Demonstration of passing multiple-argument functions
print str(x*y)
# Make some TimeoutFunction objects
# timeout is in milliseconds
a = TimeoutFunction(singleArgFunction, 1000, 20)
b = TimeoutFunction(multiArgFunction, 2000, *(11,12))
c = TimeoutFunction(quit, 3000, None)
todoList = TodoList()
todoList.addToList(a)
todoList.addToList(b)
todoList.addToList(c)
while True:
todoList.executeReadyFunctions()
===
在实践中,您可能会在while循环中进行更多操作,而不仅仅是检查超时功能是否准备就绪。您可能正在轮询用户输入,控制某些硬件,读取数据等。
我想和JDA做一个不和谐的赠品机器人。对我来说,在文件或其他地方保存条目是没有问题的,但是如何在3天后选择获胜者呢?它听起来不是很有效,使用定时器任务或保存到一个文件中的日期,并检查它每发送消息? 你不需要给我一个代码示例,但是一个简短的解释就足够了
我想在我的小部件构建完成后,在一定的延迟后执行一个函数。在Flatter中,这样做的惯用方法是什么? 我试图实现的是:我想从默认的FlutterLogo小部件开始,然后在一段时间后更改其样式属性。
问题内容: 由于某些原因,我必须运行一个php脚本才能从Python获取图像。因为php脚本很大,而且不是我的,所以我需要几天的时间才能找到所使用的正确算法并将其转换为python。 我想知道是否有任何方法可以运行带有少量参数的php脚本,以返回python中的图像。 问题答案: 示例代码:
本文向大家介绍以下代码的执行顺序?相关面试题,主要包含被问及以下代码的执行顺序?时的应答技巧和注意事项,需要的朋友参考一下 参考回答: //输出2,6,5,3,4,1 为什么呢?具体请参考我的文章: 从promise、process.nextTick、setTimeout出发,谈谈Event Loop中的Job queue
问题内容: 我实质上是试图浏览html文件的文件夹。我想将它们嵌入到二进制文件中,并能够根据请求解析它们以用于模板执行目的。(如果我的措词不正确,请原谅)。 任何想法,技巧,窍门或实现此目的的更好方法将不胜感激。 问题答案: 我使用大多数Go Web应用程序执行此操作。我使用go-bindata从要嵌入的所有文件中自动生成Go源代码,然后将其编译为二进制文件。所有这些都是在构建过程中自动完成的。
本文向大家介绍如何在Python中执行包含Python代码的字符串?,包括了如何在Python中执行包含Python代码的字符串?的使用技巧和注意事项,需要的朋友参考一下 如果要执行Python语句,可以使用exec(string)。例如, 但是,如果您只想评估表达式的值,则可以使用。例如, 注意:同时使用eval和exec时请务必谨慎,因为它们是非常强大的功能 并可能在您的代码中引起非常细小的
问题内容: 今天,我一直在尝试使用SQL二进制对象。我首先将图像存储在表中,向图像进行base64编码的AJAX请求,然后与之一起显示。 图像显示良好。 我正在处理的Web项目也需要文件下载(主要是PDF)-太好了,我想,我也将PDF存储为SQL二进制对象,以相同的方式从服务器收集它,然后以某种方式神奇地解码在另一端下载。 帮助! 我首先尝试使用jQuery base64解码器(https://g
我正在使用放心进行API测试自动化。我想在调用API后将响应存储为对象,这样我就可以使用该对象验证一些数据,如状态代码、正文、标题等。 我试着使用但它只允许存储字符串,如果将响应存储为类似字符串的并尝试检索