我正在编写一个python脚本,它将创建一个从数据库中获取和执行任务的子进程。
任务由运行在同一台机器上的php网站插入数据库。
选择并更新这些任务的好处(需要快速)方法,以避免被python脚本多次选中
编辑:数据库是mysql
提前致谢
答案 0 :(得分:1)
在不了解您的架构的情况下,我建议使用以下方法。
1) Lock Process table
2) Select ... from Process table where State="New"
3) processlist = [list of process id''s from step 2]
4) Update Process table set State="In progress" where ProcessId in [processlist]
5) Unlock Process table.
答案 1 :(得分:1)
加快速度的方法是将进程放入存储过程,并从该过程返回选定的行。这样,只有一次到数据库服务器。
答案 2 :(得分:1)
使用InnoDB表Tasks
,然后:
select TaskId, ... from Tasks where State="New" limit 1;
update Tasks set State="In Progress" where TaskId=<from above> and State="New";
如果更新成功,您可以处理该任务。否则,请再试一次。
你需要一个关于TaskId和State的索引。