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

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

  • 使用 Watchdog

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

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

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

解决 RabbitMQ Windows 安装问题 TCP connection succeeded but Erlang distribution failed

在 Windows 上安装完 RabbitMQ 后,用命令查看状态:
rabbitmqctl status
发现错误:

错误原因:Windows 上安装后会运行 RabbitMQ Service,这个服务运行使用的 Erlang Cookie 和登录用户使用的 Erlang Cookie 不匹配导致的。

RabbitMQ Service 使用的 Cookie 是:

C:\Windows\System32\config\systemprofile\.erlang.cookie

用户使用的 Cookie 是

C:\Users\Administrator\.erlang.cookie

把 RabbitMQ Service 的 Cookie 文件复制覆盖到用户的 Cookie 就可以了。

还有一个方法就是:停止 RabbitMQ Service,手动运行 rabbitmq-server.bat

Python 多线程然并卵

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

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

Green threads 一定要做。

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

IntelliJ IDE 开发 Python 程序时更好地使用代码提示(自动完成)

在编写代码时,编辑器的代码提示(自动完成)功能无疑是提高工作效率不可或缺的。

当然,前提是编辑器需要知道变量(参数)的类型。

以下内容源自 IntelliJ PyCharm 官方手册:https://www.jetbrains.com/help/pycharm/type-hinting-in-pycharm.html

  • 声明参数(parameter)的类型

    声明参数的类型
  • 声明返回值的类型

    声明返回值的类型

    通过 -> int 表明 f() 的返回值是 int 类型

  • 声明变量、属性的类型

    声明变量、属性的类型

    声明变量的类型


     
  • 代码注释里声明类型

    在代码注释里声明类型
    在注释里声明方法的返回值的类型

    声明参数的类型

IntelliJ IDEA 光标消失问题

碰到这个问题很郁闷啊,一段时间后,光标就莫名消失了,得重启 IntelliJ IDEA 才行,到官方论坛询问才得知,系统时间如果被调前就会发生这个情况(防止 license 过期后用户继续使用?)。我电脑系统(Windows 10)因为系统时间同步的问题,确实老是不准。

总之,把系统时间调准后,IntelliJ IDEA 的光标就回来了。

接下来我把系统时间同步问题解决就一切 OK 了。