标签: pyinotify

芹菜autoreload无法正常工作

我正在使用Celery 3.1.16经纪人(运行RabbitMQ)和多名芹菜工人与celeryd通过主管守护.问题在于任务更新.当我更新我的tasks.py文件时,芹菜工作者运行旧代码.

芹菜发射命令:

/home/my_project/bin/celery -B --autoreload --app=my_app.celery:app worker --loglevel=INFO
Run Code Online (Sandbox Code Playgroud)

我在django settings.py中包含任务文件:

CELERY_IMPORTS = [
    'my_app.tasks'
]
Run Code Online (Sandbox Code Playgroud)

pyinotify安装并工作(我猜是这样),芹菜日志的一部分:

[2014-12-16 20:56:00,016: INFO/MainProcess] Task my_app.tasks.periodic_update_task_statistic[175c2557-7c07-43c3-ac70-f4e115344134] succeeded in 0.00816309102811s: 'ok!'
[2014-12-16 20:56:11,157: INFO/MainProcess] Detected modified modules: ['my_app.tasks']
[2014-12-16 20:57:00,001: INFO/Beat] Scheduler: Sending due task my_app.tasks.periodic_update_task_statistic (my_app.tasks.periodic_update_task_statistic)
[2014-12-16 20:57:00,007: INFO/MainProcess] Received task: my_app.tasks.periodic_update_task_statistic[f22998a9-dcb4-4c29-8086-86dd6e57eae1]
Run Code Online (Sandbox Code Playgroud)

所以,我的问题是:如果修改了celery更新并应用新任务代码?

python django celery pyinotify celerybeat

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

使用pyinotify来监视文件创建,但是等待它完全写入磁盘

我正在使用pyinotify来查看在其中创建文件的文件夹.当创建某些文件时,我想移动它们.问题是,一旦创建文件(显然),我的程序就会尝试移动它,甚至在它完全写入磁盘之前.

有没有办法使pyinotify等到一个文件完全写入磁盘,然后通知我它已被创建?还是有任何简单的方法,在我收到通知后,让python等待移动它直到它完成写入?

python linux file pyinotify

7
推荐指数
1
解决办法
4169
查看次数

为什么Pyinotify不能观看导演?

我想Pyinotify看一个模板目录,它有子文件夹,但我收到这个错误:

DIRECTORY /home/project/templates
[Pyinotify ERROR] add_watch: cannot watch /home/project/templates WD=-1
[Pyinotify ERROR] add_watch: cannot watch /home/project/templates/dir1 WD=-1
[Pyinotify ERROR] add_watch: cannot watch /home/project/templates/dir2 WD=-1
Waiting for stuff to happen...
Run Code Online (Sandbox Code Playgroud)

我找到了诸如使用unicode目录名或使用其他使用inotify的程序的答案,但每个程序都过于具体.

什么一般导致这个错误?

watch inotify pyinotify

5
推荐指数
1
解决办法
4055
查看次数

如何使pyinotify在文件的任何修改上运行程序?

我必须观察给出的任何输入或对文件中的当前内容所做的任何更改,在进行任何修改时我需要运行位于同一文件夹中的python程序.

我尽力了解,但我无法取得任何好成绩.如果有人能帮我解决这个问题,那将会有很大的帮助.

谢谢.. :)

python pyinotify

5
推荐指数
1
解决办法
4122
查看次数

flask"hello world"无法在调试模型中运行

我按照官方文档,安装了virtualenv和flask,然后python hello.py 却出现了问题:

 * Running on http://127.0.0.1:5000/
 * Restarting with reloader: inotify events
Traceback (most recent call last):
  File "hello.py", line 9, in <module>
    app.run(debug=True)
  File "/home/aa/prj/env/lib/python2.7/site-packages/Flask-0.7.2-py2.7.egg/flask/app.py", line 553, in run
    return run_simple(host, port, self, **options)
  File "/home/aa/prj/env/lib/python2.7/site-packages/Werkzeug-0.7-py2.7.egg/werkzeug/serving.py", line 609, in run_simple
    run_with_reloader(inner, extra_files, reloader_interval)
  File "/home/aa/prj/env/lib/python2.7/site-packages/Werkzeug-0.7-py2.7.egg/werkzeug/serving.py", line 528, in run_with_reloader
    reloader_loop(extra_files, interval)
  File "/home/aa/prj/env/lib/python2.7/site-packages/Werkzeug-0.7-py2.7.egg/werkzeug/serving.py", line 436, in reloader_loop
    reloader(fnames, interval=interval)
  File "/home/aa/prj/env/lib/python2.7/site-packages/Werkzeug-0.7-py2.7.egg/werkzeug/serving.py", line 464, in _reloader_inotify
    mask = reduce(lambda m, a: m | getattr(EventsCodes, a), mask, 0)
  File …
Run Code Online (Sandbox Code Playgroud)

python inotify pyinotify flask

5
推荐指数
1
解决办法
982
查看次数

pyinotify 过早的 IN_CLOSE_WRITE 通知

我遇到以下情况:

  • pyinotify 监视文件中的 IN_CLOSE_WRITE 事件
  • 我更改了文件中的内容并保存
  • 事件被触发
  • 我阅读了文件,发现它没有任何变化

稍微修改了一下之后,我注意到它在调试时运行良好。我在读取文件的行上设置了一个断点,从而增加了一点延迟。之后 - 文件被读取并且更改就在那里。

因此,添加 atime.sleep(1)或以其他方式延迟执行似乎可以解决问题。否则我会收到一个过早的 IN_CLOSE_WRITE 事件。

我想知道该事件是提交更改并关闭文件之后还是之前触发。IN_CLOSE_WRITE 之后似乎没有其他相关事件。同时,文档有点棘手:

使用 IN_CLOSE_WRITE 因为如果发出,则相应文件上的所有更改都会安全地写入文件中

我提交了关于常见问题解答中措辞的错误报告,但与此同时,我想就此事获得一些额外的意见。这是应该发生的吗?什么是“道德正确”的解决方法?

所有这些都发生在 Linux Mint 15 x64 上。

inotify pyinotify

5
推荐指数
1
解决办法
1725
查看次数

如果addons路径内容是模块的链接,为什么参数--auto-reload不起作用?

描述

通常,如果更改python代码意味着,则需要重新启动服务器才能应用新更改.

如果--auto-reload参数已启用,则表示您无需重新启动服务器.它可以自动重新加载python文件和xml文件,而无需重新启动服务器.它需要pyinotify.它是一个用于监视文件系统更改的Python模块.

以前的问题

我收到了错误:

ERROR ? pyinotify: add_watch: cannot watch /home/user/.local/share/Odoo/addons/8.0 WD=-1, Errno=No space left on device (ENOSPC)
Run Code Online (Sandbox Code Playgroud)

但我按照这个链接的建议,现在我不再得到这个错误:

sysctl -n -w fs.inotify.max_user_watches=16384
Run Code Online (Sandbox Code Playgroud)

在此之后我在服务器日志中得到了这个:

openerp.service.server: Watching addons folder /opt/odoo_8/src/linked-addons
openerp.service.server: AutoReload watcher running
Run Code Online (Sandbox Code Playgroud)

这意味着它正常工作.事实上,我用一个物理插件路径测试它,它工作.

当前的问题

我的所有模块都有几个文件夹,但我只使用一个插件路径:/opt/odoo_8/src/linked-addons.此文件夹包含我正在使用的模块的所有链接.当我运行Odoo时,所有模块都运行良好.

但问题是pyinotify无法检查链接之外的文件,也不能很好地重新加载文件.我应该怎么做才能解决这个问题?pyinotify有没有办法识别链接的内容?

PD:我不想改变我在Odoo中管理模块文件夹的方式.

python pyinotify python-2.7 odoo odoo-8

5
推荐指数
1
解决办法
947
查看次数

使用python-asyncio时如何重载模块?

我正在使用pyinotify跟踪文件更改并尝试重载此修改文件所在的模块.但不幸的是,不是模块可能没有超载,我看不到变化.

import sys
import asyncio
import pyinotify
import importlib
from aiohttp import web
from aa.aa import m_aa


class EventHandler(pyinotify.ProcessEvent):

   def my_init(self, loop=None):
       self.loop = loop if loop else asyncio.get_event_loop()

    def process_IN_MODIFY(self, event):
       pathname = event.pathname
       name = event.name
       if name.endswith('.py'):
            for module in sys.modules.values():
               if hasattr(module, '__file__'):
                   if module.__file__ == pathname:
                       importlib.reload(module)

def inotify_start(loop):
   wm = pyinotify.WatchManager()
   wm.add_watch('/home/test', pyinotify.ALL_EVENTS, rec=True)
   handler = EventHandler( loop=loop )
   pyinotify.AsyncioNotifier(wm, loop, default_proc_fun=handler)


async def init(loop):
   app = web.Application()
   app.router.add_route('GET', '/', m_aa)
   handler …
Run Code Online (Sandbox Code Playgroud)

python pyinotify python-3.x python-asyncio aiohttp

5
推荐指数
1
解决办法
339
查看次数

哪个inotify事件表示大文件操作完成?

对于大文件或慢速连接,复制文件可能需要一些时间.

使用pyinotify,我一直在关注IN_CREATE事件代码.但这似乎发生在文件传输的开始.我需要知道文件什么时候被完全复制 - 如果文件只有一半那么它就没什么用了.

文件传输完成并完成后,会触发什么inotify事件?

python inotify pyinotify

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

成功单位测试pyinotify?

我正在使用pyinotify将文件从源目录镜像到目标目录.当我手动执行时,我的代码似乎正常工作,但我无法获得准确的单元测试结果.我认为问题归结为:

  1. 我必须 在我的测试中使用ThreadedNotifier,否则它们会挂起,等待手动输入.
  2. 因为我正在使用另一个线程,我的测试和通知程序不同步.运行观察性手动测试时通过的测试在运行单元测试时失败.

有没有人成功进行pyinotify单元测试?

python synchronization unit-testing pyinotify

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

如何在模板更改时重新加载pserve?

我有pserve --reload可以处理任何python更改,但是当我更改模板时我仍然需要手动重新加载.

我创建了这个监视模板文件夹的小脚本以进行任何更改,但是重新加载pserve的命令是什么?如果我需要从我的Pyramids项目中调用一个pserve方法,比如在init .py或者其他什么东西,我会调用什么方法来重新加载pserve?

#!/usr/bin/env python
import sys
import pyinotify
from subprocess import call
import time

wm = pyinotify.WatchManager()
mask = pyinotify.IN_DELETE | pyinotify.IN_CREATE | pyinotify.IN_MODIFY

class EventHandler(pyinotify.ProcessEvent):
    def process_IN_MODIFY(self, event):
        print "Modified: ", event.pathname

        # This is where my reload call would go...            
        # call(["pserve", "reload"])

handler = EventHandler()
notifier = pyinotify.Notifier(wm, handler)
wdd = wm.add_watch("/path/to/my/pyramid/templates/", mask, rec=True, auto_add=True)

notifier.loop()
Run Code Online (Sandbox Code Playgroud)

python pyinotify pyramid

2
推荐指数
1
解决办法
1429
查看次数