相关疑难解决方法(0)

在Python中每x秒重复执行一次函数的最佳方法是什么?

我想永远每60秒在Python中重复执行一个函数(就像目标C中的NSTimer一样).这段代码将作为守护进程运行,实际上就像使用cron每分钟调用python脚本一样,但不需要用户设置.

这个关于用Python实现的cron的问题中,解决方案似乎实际上只是sleep() x秒.我不需要这样的高级功能,所以也许这样的东西可行

while True:
    # Code executed here
    time.sleep(60)
Run Code Online (Sandbox Code Playgroud)

这段代码有可预见的问题吗?

python timer

245
推荐指数
12
解决办法
36万
查看次数

调度Python脚本以准确地每小时运行一次

在我问之前,Cron Jobs和Task Scheduler将是我的最后选择,这个脚本将在Windows和Linux之间使用,我更愿意使用编码方法来完成此操作,而不是将其留给最终用户完成.

是否有可用于安排任务的Python库?我需要每小时运行一次函数,但是,如果我每小时运行一次脚本并使用.sleep,"每小时一次"将在前一天的不同时间运行,因为延迟执行/运行脚本和/或功能所固有的.

使用Cron作业或使用任务计划程序进行计划的情况下,安排函数在一天中的特定时间(不止一次)运行的最佳方法是什么?

或者,如果这是不可能的,我也希望你的意见.

AP Scheduler完全符合我的需求.

版本<3.0

import datetime
import time
from apscheduler.scheduler import Scheduler

# Start the scheduler
sched = Scheduler()
sched.daemonic = False
sched.start()

def job_function():
    print("Hello World")
    print(datetime.datetime.now())
    time.sleep(20)

# Schedules job_function to be run once each minute
sched.add_cron_job(job_function,  minute='0-59')
Run Code Online (Sandbox Code Playgroud)

出:

>Hello World
>2014-03-28 09:44:00.016.492
>Hello World
>2014-03-28 09:45:00.0.14110
Run Code Online (Sandbox Code Playgroud)

版本> 3.0

(来自Animesh Pandey的答案如下)

from apscheduler.schedulers.blocking import BlockingScheduler

sched = BlockingScheduler()

@sched.scheduled_job('interval', seconds=10)
def timed_job():
    print('This job is run every …
Run Code Online (Sandbox Code Playgroud)

python cron scheduled-tasks cron-task python-3.x

48
推荐指数
4
解决办法
10万
查看次数

每隔N秒实时在线程中执行函数

我有一个线程类,其循环需要每秒执行4次.我知道我可以做类似的事情

do_stuff()
time.sleep(0.25)
Run Code Online (Sandbox Code Playgroud)

但问题是,这是不考虑所需的时间do_stuff().实际上,这需要是一个实时线程.有没有办法实现这个目标?理想情况下,线程在不执行代码时仍会处于休眠状态.

python multithreading real-time

15
推荐指数
1
解决办法
3万
查看次数

推迟python中的函数

在JavaScript中,我习惯于能够调用稍后要执行的函数,就像这样

function foo() {
    alert('bar');
}

setTimeout(foo, 1000);
Run Code Online (Sandbox Code Playgroud)

这不会阻止其他代码的执行.

我不知道如何在Python中实现类似的东西.我可以睡觉

import time
def foo():
    print('bar')

time.sleep(1)
foo()
Run Code Online (Sandbox Code Playgroud)

但这会阻止其他代码的执行.(实际上在我的情况下阻塞Python本身并不是问题,但我无法对该方法进行单元测试.)

我知道线程是为不同步执行而设计的,但我想知道是否更容易,类似setTimeoutsetInterval存在.

python multithreading setinterval

10
推荐指数
2
解决办法
8449
查看次数

改进setInterval python的当前实现

我试图弄清楚如何制作一个在python中取消的setInterval而不需要创建一个完整的新类,我想出了如何但现在我想知道是否有更好的方法来做到这一点.

下面的代码似乎工作正常,但我没有彻底测试它.

import threading
def setInterval(func, sec):
    def inner():
        while function.isAlive():
            func()
            time.sleep(sec)
    function = type("setInterval", (), {}) # not really a function I guess
    function.isAlive = lambda: function.vars["isAlive"]
    function.vars = {"isAlive": True}
    function.cancel = lambda: function.vars.update({"isAlive": False})
    thread = threading.Timer(sec, inner)
    thread.setDaemon(True)
    thread.start()
    return function
interval = setInterval(lambda: print("Hello, World"), 60) # will print Hello, World every 60 seconds
# 3 minutes later
interval.cancel() # it will stop printing Hello, World 
Run Code Online (Sandbox Code Playgroud)

有没有办法在不创建继承threading.Thread或使用的专用类的情况下执行上述操作type("setInterval", (), {}) …

python python-3.x

9
推荐指数
1
解决办法
5870
查看次数

sqlite3 数据库被锁定

当我必须从actions表中删除记录时,出现数据库锁定错误。

有两个程序可以在 sqlite3 数据库上读写

一个是将硬件操作的结果写入sqlite3表上的ac程序,另一个是从sqlite读取记录并处理它们并在完成作业后删除行的python脚本。

但是python脚本database is locked在删除行时显示错误..

数据库名称: db.db

数据库表: TABLE 'actions' ( 'rid' INTEGER PRIMARY KEY AUTOINCREMENT, 'owner' INTEGER, 'action' TEXT, 'node' TEXT, 'value' TEXT

蟒蛇脚本:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import sqlite3
import time
import os.path
import requests
#import urllib.parse

#defines
BASE_DIR = os.path.dirname(os.path.abspath(__file__))
db_path = os.path.join(BASE_DIR+"/dbs/", "db.db")
wd_file_path = os.path.join(BASE_DIR, "wd")
pid = os.getpid()
conn = sqlite3.connect(db_path, isolation_level=None ,timeout=30000)
print ("Opened database successfully");
while True:
    res = conn.execute("select * from …
Run Code Online (Sandbox Code Playgroud)

python sqlite

6
推荐指数
1
解决办法
6801
查看次数

每秒运行一个python函数

我想要的是能够每秒运行一个函数,与函数花费的时间无关(它应该总是在一秒钟之内).我考虑了很多选择,但不确定哪个是最好的.

如果我只使用延迟功能,则不会考虑该功能运行所需的时间.

如果我对函数进行计时,然后从一秒中减去该函数并在延迟中弥补其余部分,则不会考虑时间计算.

我尝试使用threading.timer(我不确定这是如何工作的来龙去脉)但它看起来确实比1s慢.

这是我尝试测试threading.timer的代码:

def update(i):
    sys.stdout.write(str(i)+'\r')
    sys.stdout.flush()
    print i
    i += 1
    threading.Timer(1, update, [i]).start()
Run Code Online (Sandbox Code Playgroud)

有没有办法与函数所用的时间长度无关?

python

3
推荐指数
3
解决办法
2万
查看次数