Skip to content

Commit

Permalink
Add wrapper to create threads compatible with the selected async mode
Browse files Browse the repository at this point in the history
  • Loading branch information
miguelgrinberg committed Sep 8, 2015
1 parent 015c97d commit d20c114
Show file tree
Hide file tree
Showing 4 changed files with 25 additions and 2 deletions.
6 changes: 6 additions & 0 deletions engineio/server.py
Original file line number Diff line number Diff line change
Expand Up @@ -308,6 +308,12 @@ def _get_socket(self, sid):
raise KeyError('Session is disconnected')
return s

def _start_background_task(self, target, *args, **kwargs):
"""Start a background task using the appropriate async model."""
return getattr(self.async['threading'],
self.async['thread_class'])(target=target, args=args,
kwargs=kwargs)

def _ok(self, packets=None, headers=None, b64=False):
"""Generate a successful HTTP response."""
if packets is not None:
Expand Down
3 changes: 1 addition & 2 deletions engineio/socket.py
Original file line number Diff line number Diff line change
Expand Up @@ -150,8 +150,7 @@ def writer():
except:
break

writer_task = getattr(self.server.async['threading'],
self.server.async['thread_class'])(target=writer)
writer_task = self.server._start_background_task(writer)
writer_task.start()

self.server.logger.info(
Expand Down
13 changes: 13 additions & 0 deletions tests/test_server.py
Original file line number Diff line number Diff line change
Expand Up @@ -619,3 +619,16 @@ def loads(*args, **kwargs):

# restore the default JSON module
packet.Packet.json = json

def test_background_tasks(self):
flag = {}

def bg_task():
flag['task'] = True

s = server.Server()
task = s._start_background_task(bg_task)
task.start()
task.join()
self.assertIn('task', flag)
self.assertTrue(flag['task'])
5 changes: 5 additions & 0 deletions tests/test_socket.py
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,11 @@ def _get_mock_server(self):
'queue': queue,
'queue_class': 'Queue',
'websocket': None}

def bg_task(target, *args, **kwargs):
return threading.Thread(target=target, args=args, kwargs=kwargs)

mock_server._start_background_task = bg_task
return mock_server

def test_create(self):
Expand Down

0 comments on commit d20c114

Please sign in to comment.