Skip to content

Commit

Permalink
Abstracted schedulers
Browse files Browse the repository at this point in the history
  • Loading branch information
syrusakbary committed Mar 17, 2017
1 parent 56c86b8 commit 8f03b91
Show file tree
Hide file tree
Showing 4 changed files with 50 additions and 33 deletions.
23 changes: 21 additions & 2 deletions promise/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,25 @@
__version__ = get_version(VERSION)

if not __SETUP__:
from .promise import Promise, promise_for_dict, promisify, is_thenable, async_instance
from .promise import (
Promise,
promise_for_dict,
promisify,
is_thenable,
async_instance,
get_default_scheduler,
set_default_scheduler
)
from .scheduler import SyncScheduler, ThreadScheduler

__all__ = ['Promise', 'promise_for_dict', 'promisify', 'is_thenable', 'async_instance']
__all__ = [
'Promise',
'promise_for_dict',
'promisify',
'is_thenable',
'async_instance',
'get_default_scheduler',
'set_default_scheduler',
'SyncScheduler',
'ThreadScheduler'
]
33 changes: 3 additions & 30 deletions promise/async_.py
Original file line number Diff line number Diff line change
@@ -1,32 +1,5 @@
# from threading import Timer, Thread

# Based on https://github.com/petkaantonov/bluebird/blob/master/src/promise.js
from .compat import Queue
# from .context import Context

# Based on https://github.com/petkaantonov/bluebird/blob/master/src/async.js


class Scheduler(object):

def call(self, fn):
# thread = Thread(target=fn)
# thread = Timer(0.01, fn)
# fn = thread.start
try:
# c = Context.peek_context()
# if not c:
fn()
# else:
# c.on_exit(fn)
except:
pass
# thread = Thread(target=fn)
# thread = Timer(0.001, fn)
# thread.start()


def get_default_scheduler():
return Scheduler()


# https://docs.python.org/2/library/queue.html#Queue.Queue
Expand All @@ -36,13 +9,13 @@ def get_default_scheduler():

class Async(object):

def __init__(self, schedule=None):
def __init__(self, schedule):
self.is_tick_used = False
self.late_queue = Queue(LATE_QUEUE_CAPACITY)
self.normal_queue = Queue(NORMAL_QUEUE_CAPACITY)
self.have_drained_queues = False
self.trampoline_enabled = True
self.schedule = schedule or get_default_scheduler()
self.schedule = schedule

def enable_trampoline(self):
self.trampoline_enabled = True
Expand Down
12 changes: 11 additions & 1 deletion promise/promise.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,18 @@
from .utils import deprecated, integer_types, string_types, text_type, binary_type
from .context import Context
from .promise_list import PromiseList
from .scheduler import SyncScheduler

async_instance = Async(SyncScheduler())


def get_default_scheduler():
return async_instance.scheduler


def set_default_scheduler(scheduler):
async_instance.scheduler = scheduler

async_instance = Async()

IS_PYTHON2 = version_info[0] == 2
DEFAULT_TIMEOUT = None # type: float
Expand Down
15 changes: 15 additions & 0 deletions promise/scheduler.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
from threading import Thread


class SyncScheduler(object):
def call(self, fn):
try:
fn()
except:
pass


class ThreadScheduler(object):
def call(self, fn):
thread = Thread(target=fn)
thread.start()

0 comments on commit 8f03b91

Please sign in to comment.