文件修改时自动重新运行 Celery 的 Worker

下面介绍实现 autoreload 两种方式:

  • 使用 Watchdog

    Watchdog 的 watchmedo 命令可以监控某个目录下的文件修改,重新运行子进程。我们可以利用它实现 Celery worker 的自动重新运行。

你可以直接使用 start-celery-for-dev.py ,它就是基于 watchdog 实现的。

  • 使用 Django
    Django 本身有个机制是监控程序文件改变然后自动重新运行 runserver 命令,我们可以利用这个机制来实现:

解决 Windows 上运行 Celery 4.1 问题:ValueError: not enough values to unpack

Celery 4.1 的这个问题只在 Windows 上有,Celery 4.1 开发环境所限并不能完美兼容 Windows

这个问题有三解决方法:

  1. 使用别的 pool
    在创建 worker 时使用别的 pool,例如 eventlet、solo

    celery -A tasks worker –loglevel=info –pool=eventlet

  2. 设置环境变量 FORKED_BY_MULTIPROCESSING
    在创建 worker 时设置一下环境变量

    set FORKED_BY_MULTIPROCESSING=1

  3. 使用旧版本的 Celery

     

Python 多线程然并卵

真的,在 Python 里多线程(multiple threading)没什么卵用的,因为有 GIL 的存在。

在 Python 里如果需要多任务的话,一定要选择多进程(multiple processing)+ Green threads(greenlet/twisted/asyncio/…)的方式。

Green threads 一定要做。

其实也别实现什么多进程了,直接多运行几个 main.py 就好了。

Python 替换网址(url)中的文件名

django 使用 mssql 遇到“没有活动事务时,不能发出 SAVE TRANSACTION”

django mssql SAVE TRANSACTION problem
django 使用 mssql 遇到“没有活动事务时,不能发出 SAVE TRANSACTION”的问题

这个问题有两个解决方法:

  • 第一种方法:provider 使用 SQLNCLI11
    SQLNCLI11 即 Microsoft® SQL Server® 2012 Native Client,下载并安装

    install SQLNCLI11
    安装 SQLNCLI11

    但我安装时碰到了 dll 缺失的问题,实在不想再折腾了,跳过。

    install SQLNCLI11 dll
    安装 SQLNCLI11 又遇到 dll 缺失的问题

     

  • 第二种方法:provider 使用 SQLOLEDB,设置 ATOMIC_REQUESTS 为 True
    打开 settings.py 在 DATABASES 下增加 ATOMIC_REQUESTS 的设置:

    20171202113004
    ‘ATOMIC_REQUESTS’:True,

‘Can not connect to GhostDriver’

我的环境是Mac OSX、Intellij IDEA、Python 3.5、Selenium、PhantomJS,结果在测试PhantomJS时:
driver = webdirver.PhantomJS()
dirver.get('http://www.baidu.com')
print(driver.current_url)
driver.quit()

老是出现错误:
WebDriverException: Message: 'Can not connect to GhostDriver'
解决这个问题也很简单,就是确保Python和PhantomJS在同一运行环境下,如果你的Python Interpreter是放在virtualenv里,而PhantomJS是安装在系统里的(通过brew安装?)那就会有这样的问题。
所以我最终在Run/Debug Configurations里把Python Interpreter指向系统的Python就可以了。

selenium python停止Firefox加载

在用selenium+python+Firefox时发现:

driver.get(“http://www.itamt.com”)

程序会保持执行一直到整个页面加载完毕或用户停止页面加载(点击Firefox上的停止按钮),但是有的网页会当有使用外部资源时会一直处于加载状态,特别当使用墙外资源时这个情况就更加严重了。

可翻遍了selenium.webdriver.Firefox也找不到可以stop loading的API。最后不得不放弃,不知道哪位还有办法吗?

我现在的解决方案是不用Firefox driver,改用phantomjs的,selenium+python+phantomjs的环境下貌似自带了GhostDriver(我搞不清楚是phantomjs还是selenium python带的),安装也十分容易。但目前还没有空把以前的项目都迁移过来。

到时再作作这方面的介绍。

caidao.py

写了个python的菜刀(caidao.py),一句话马用来管理网站其实很方便,虽然总是被用于黑来黑去的(webshell)。

🙁

当然也可以直接用chopper.exe,但总是要担心安全问题。

我得做自己的菜刀啊,所以就有了caidao.py,不知道有没有人已经做这件事情了。

目前支持简单的文件操作:upload/remove/download/rename/mkdir/cd

等再成熟点就放到github上。