Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 跨不同容器接收Django信号_Python_Django_Docker Compose_Django Signals - Fatal编程技术网

Python 跨不同容器接收Django信号

Python 跨不同容器接收Django信号,python,django,docker-compose,django-signals,Python,Django,Docker Compose,Django Signals,我目前正在从事Django项目,在处理不同容器中的信号时遇到一些问题 我有一个连接到上游数据管道并填充Django数据库的第一个容器。我有另一个用于后端本身的容器,我正在其上运行服务器。我想使用信号“保存后”来通知我的一个应用程序,新模型实例已保存。因此,我使用应用程序中的下一段代码来接收此信号并处理已保存的实例 @receiver(post_save, sender=Organization) def index_post_save(sender, instance, **kwargs):

我目前正在从事Django项目,在处理不同容器中的信号时遇到一些问题

我有一个连接到上游数据管道并填充Django数据库的第一个容器。我有另一个用于后端本身的容器,我正在其上运行服务器。我想使用信号“保存后”来通知我的一个应用程序,新模型实例已保存。因此,我使用应用程序中的下一段代码来接收此信号并处理已保存的实例

@receiver(post_save, sender=Organization)
def index_post_save(sender, instance, **kwargs):
    connections.create_connection(hosts=['elasticsearch'])  
    instance.indexing()
如果我在Django管理界面上手动创建一个Organization实例,这将非常有效,但是当我用第一个容器填充数据库时,不会收到信号

下面是docker compose文件的一部分,其中包含我描述的两个容器:

worker:
   build:
      context: .
      dockerfile: Dockerfile
   command: ./run_celery.sh
   env_file:
      - ./.envs/.local/.workers
   volumes:
      - .:/app

web:
   restart: always
   build:
     context: .
     dockerfile: Dockerfile
   hostname: web
   command: /app/run_web.sh
   env_file:
     - ./.envs/.local/.web
   volumes:
     - .:/app
   ports:
     - "80:8000"
   links:
     - db
     - pipeline_db
   depends_on:
     - db
     - pipeline_db
     - elasticsearch
有没有一种方法可以跨容器使用Django信号,或者我应该使用其他方法来发送和接收这些消息


谢谢等等什么?这些信号只在django项目中起作用,一个信号可以到达的最外部点是在方法中运行命令save()并检查数据库是否保存了它

您可以做的是在终端、API、套接字或任何通信中运行一些python代码,这些都是您想要谈论后端的通信

因此,给一个镜头,你可以使一个API到你的管道上游(我不知道它是什么)能够接收一些POST或GET方法,并设置你的后端发送一个请求到你的应用程序(在其他容器中)接收数据,你想要的。。。您可以使用
请求
curl


我认为您在不同的容器中使用2台服务器

Django不会向其他正在运行的进程(实例)发送信号,它只是为当前正在运行的实例触发它们,它甚至不知道其他容器的存在。您应该实现某种消息队列来通知其他容器。据我所知,您已经在使用芹菜了,所以您可以在“index\u post\u save”方法下使用芹菜将消息传递到另一个容器。是的,正如我在回答中所说,您可以使用某种通信方式,如API、套接字。。。每个服务器都在不同的端口上运行,如果在同一个服务器上,您可能会记住为这些答案设置CORSOk thansk。由于容器使用相同的数据库,我认为有一种方法可以使信号在两者之间工作。我想我要芹菜汁