通过并行线程

时间:2017-06-29 18:40:19

标签: python django multithreading websocket pusher

今天我一直在尝试在Javascript和Django之间创建一个异步任务。

要创建websockets并管理它们,我使用了第三方API推送器(请确保该问题不是针对推送器的)。当系统在主线程中使用时,该系统首先运行良好:

import pusher
import time
from django.shortcuts import render

...
def myView(request):
    ...
    def sendData():
        time.sleep(10)
        pusher_client = pusher.Pusher(
          args='values',
        )
        pusher_client.trigger('my-channel', 'my-event', {'message': 'Test'})
    ...
    return render('My.html', {'keys': 'values'})

这是Javascript中的监听器:

var channel = pusher.subscribe('my-channel');
channel.bind('my-event', function(data) {
  alert(data.message);
});

然后我想创建一个并行线程,因此用户不会等待10秒钟来接收并行线程。相反,将显示模板,用户将在请求后10秒内收到警报。

所以我添加了以下代码,这些代码将分离两个进程:

import pusher
import time
from django.shortcuts import render
from threading import Thread

...
def myView(request):
    ...
    def sendData():
        time.sleep(10)
        pusher_client = pusher.Pusher(
          keys='values',
        )
        pusher_client.trigger('my-channel', 'my-event', {'message': 'Test'})

    th = Thread(target=sendData)
    th.daemon = True
    th.start()
    ...
    return render('My.html', {'keys': 'values'})

为函数创建另一个线程后,函数本身将被执行,但是,无法从Javascript传输数据......

这是我执行操作时的事件日志:

As you see, The last event is always occupied even after 10 seconds have passed

如您所见,即使经过10秒,最后一个事件也会被占用。

可能是什么问题?在不同的线程上使用websockets会导致问题吗?还有其他解决办法吗?

似乎Thread无法正常工作,因为每当我从另一台计算机节点发送消息时,都会在几秒钟内发送消息。

提前致谢。

1 个答案:

答案 0 :(得分:1)

这是由托管服务禁止多线程引起的。新线程从未启动过,因此事件从未发送给Pusher。

(我在扩展评论聊天中引用@ShellRox。)