Hi All, I am using channels to implement WebSockets. I am trying to send data through WebSockets from *post_save *django signal. Below is my code.
**signals.py** @receiver(post_save, sender=CheckIn) def send_data_on_save(sender, instance, **kwargs): channel_layer = get_channel_layer() stats = get_stats() async_to_sync(channel_layer.group_send)( 'dashboard', { 'type': 'send_data', 'message': stats } ) analytics = get_analytics() async_to_sync(channel_layer.group_send)( 'analytic', { 'type': 'send_data', 'message': analytics } ) **consumers.py** class DashboardConsumer(WebsocketConsumer): def connect(self): self.room_group_name = 'dashboard' # Join room group async_to_sync(self.channel_layer.group_add)( self.room_group_name, self.channel_name ) self.accept() def disconnect(self, close_code): # Leave room group async_to_sync(self.channel_layer.group_discard)( self.room_group_name, self.channel_name ) # Receive message from WebSocket def receive(self, text_data): text_data_json = json.loads(text_data) message = text_data_json['message'] # Send message to room group async_to_sync(self.channel_layer.group_send)( self.room_group_name, { 'type': 'send_data', 'message': message } ) # Receive message from room group def send_data(self, event): message = event['message'] # Send message to WebSocket self.send(text_data=json.dumps({ 'message': message })) this same piece of code is working on my local machine(windows) but when i am trying to run this code on server(ubuntu 16.04) i am getting bellow error: **Traceback** Exception inside application: module 'asyncio' has no attribute '_get_running_loop' File "/usr/lib/python3.5/asyncio/tasks.py", line 241, in _step result = coro.throw(exc) File "/home/user1/demowebapps/env/lib/python3.5/site-packages/channels/sessions.py" , line 183, in __call__ return await self.inner(receive, self.send) File "/home/user1/demowebapps/env/lib/python3.5/site-packages/channels/middleware.py" , line 41, in coroutine_call await inner_instance(receive, send) File "/home/user1/demowebapps/env/lib/python3.5/site-packages/channels/consumer.py" , line 59, in __call__ [receive, self.channel_receive], self.dispatch File "/home/user1/demowebapps/env/lib/python3.5/site-packages/channels/utils.py", line 52, in await_many_dispatch await dispatch(result) File "/home/user1/demowebapps/env/lib/python3.5/site-packages/asgiref/sync.py", line 145, in __call__ return await asyncio.wait_for(future, timeout=None) File "/usr/lib/python3.5/asyncio/tasks.py", line 373, in wait_for return (yield from fut) File "/usr/lib/python3.5/asyncio/futures.py", line 361, in __iter__ yield self # This tells Task to wait for completion. File "/usr/lib/python3.5/asyncio/tasks.py", line 296, in _wakeup future.result() File "/usr/lib/python3.5/asyncio/futures.py", line 274, in result raise self._exception File "/usr/lib/python3.5/concurrent/futures/thread.py", line 55, in run result = self.fn(*self.args, **self.kwargs) File "/home/user1/demowebapps/env/lib/python3.5/site-packages/channels/db.py", line 14, in thread_handler return super().thread_handler(loop, *args, **kwargs) File "/home/user1/demowebapps/env/lib/python3.5/site-packages/asgiref/sync.py", line 164, in thread_handler return func(*args, **kwargs) File "/home/user1/demowebapps/env/lib/python3.5/site-packages/channels/consumer.py" , line 105, in dispatch handler(message) File "/home/user1/demowebapps/env/lib/python3.5/site-packages/channels/generic/websocket.py" , line 39, in websocket_connect self.connect() File "/home/user1/demowebapps/vmsbackend/check_in/consumers.py", line 57 , in connect self.channel_name File "/home/user1/demowebapps/env/lib/python3.5/site-packages/asgiref/sync.py", line 41, in __call__ if asyncio._get_running_loop() is not None: module 'asyncio' has no attribute '_get_running_loop' also when i am sending data normally from javascript .send() function it is working normally on server but when post_save signal is called then only i get this error on server. this is working fine on my local system. I tried removing *async_to_sync *from signals then it is not giving error but it is not transmitting data through web socket. then it is giving: ./check_in/signals.py:47: RuntimeWarning: Coroutine 'RedisChannelLayer.group_send' was never awaited 'message': analytics I am using *python 3.5.2* on both local and server. please find attached *requirements.txt* I don't know whats wrong. is it code or something else. any help is appreciated. Thanks Regards, Rohit -- You received this message because you are subscribed to the Google Groups "Django users" group. To unsubscribe from this group and stop receiving emails from it, send an email to django-users+unsubscr...@googlegroups.com. To post to this group, send email to django-users@googlegroups.com. Visit this group at https://groups.google.com/group/django-users. To view this discussion on the web visit https://groups.google.com/d/msgid/django-users/5d499e4f-b64c-48bb-8711-5c6bbbcbe2c3%40googlegroups.com. For more options, visit https://groups.google.com/d/optout.
aioredis==1.2.0 asgiref==3.1.2 asn1crypto==0.24.0 async-timeout==3.0.1 attrs==19.1.0 autobahn==19.6.2 Automat==0.7.0 certifi==2017.11.5 cffi==1.12.3 channels==2.2.0 channels-redis==2.4.0 chardet==3.0.4 constantly==15.1.0 cryptography==2.7 daphne==2.3.0 decorator==4.1.2 Django==2.0.1 django-cors-headers==2.1.0 django-oauth-toolkit==1.0.0 djangorestframework==3.7.7 hiredis==1.0.0 hyperlink==19.0.0 idna==2.6 incremental==17.5.0 ipython==6.2.1 ipython-genutils==0.2.0 jedi==0.11.1 msgpack==0.6.1 oauthlib==2.0.6 parso==0.1.1 pexpect==4.3.1 pickleshare==0.7.4 Pillow==5.0.0 prompt-toolkit==1.0.15 psycopg2==2.7.3.2 ptyprocess==0.5.2 pycparser==2.19 Pygments==2.2.0 PyHamcrest==1.9.0 pytz==2017.3 requests==2.18.4 requests-oauthlib==1.2.0 simplegeneric==0.8.1 six==1.11.0 traitlets==4.3.2 Twisted==19.2.1 txaio==18.8.1 urllib3==1.22 wcwidth==0.1.7 zope.interface==4.6.0