Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion Pythine/__init__.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@

from pythine import Pythine
from .pythine import Pythine

__version__ = '0.0.1'

17 changes: 9 additions & 8 deletions Pythine/pythine.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import threading
from itertools import izip
from functools import reduce


__author = 'zhengxu'

Expand All @@ -15,10 +16,10 @@ def __init__(self, it):

def __iter__(self): return self

def next(self):
def __next__(self):
self.lock.acquire()
try:
return self.it.next()
return next(self.it)
finally:
self.lock.release()

Expand Down Expand Up @@ -51,7 +52,7 @@ def __init__(self, func, thread_num=5):
def _thread_worker(self, lock_iter, result_map):
while True:
try:
task_index, (task_args, task_kwargs) = lock_iter.next()
task_index, (task_args, task_kwargs) = next(lock_iter)
task_return = self._func(*task_args, **task_kwargs)
result_map[task_index] = task_return
except StopIteration:
Expand Down Expand Up @@ -86,7 +87,7 @@ def _check_list_args(*args, **kwargs):
if not isinstance(arg, list):
args[i] = [arg] * seq_len
# normalize kwargs in place
for i, k in enumerate(kwargs.keys()):
for i, k in enumerate(list(kwargs.keys())):
if not isinstance(kwargs[k], list):
kwargs[k] = [kwargs[k]] * seq_len
return seq_len
Expand All @@ -103,9 +104,9 @@ def __call__(self, *args, **kwargs):
# Make function call transparent if user only give one set of argument
return self._func(*args, **kwargs)
else:
args_list = zip(*args) or [()] * seq_len
kwargs_list = [dict(zip(kwargs.keys(), v)) for v in izip(*kwargs.itervalues())] or [{}] * seq_len
lock_iter = LockedIterator(enumerate(zip(args_list, kwargs_list)))
args_list = list(zip(*args)) or [()] * seq_len
kwargs_list = [dict(list(zip(list(kwargs.keys()), v))) for v in zip(*iter(kwargs.values()))] or [{}] * seq_len
lock_iter = LockedIterator(enumerate(list(zip(args_list, kwargs_list))))
result_map = LockedList([None] * seq_len)
thread_group = [threading.Thread(target=self._thread_worker, args=(lock_iter, result_map))
for _ in range(thread_num)]
Expand Down
7 changes: 4 additions & 3 deletions tests/test_class_init.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
import requests

from Pythine import Pythine
from functools import reduce


def _slow_network(url):
Expand All @@ -19,10 +20,10 @@ def time_slow_network(test_time):
t1 = time.time()
ret = slow_network([url] * test_time)
t2 = time.time()
print "Without thread engine: %f" % (t1-t0)
print "With thread engine: %f" % (t2-t1)
print("Without thread engine: %f" % (t1-t0))
print("With thread engine: %f" % (t2-t1))
# check result
print reduce(lambda x, y: x and bool(y), ret, True)
print(reduce(lambda x, y: x and bool(y), ret, True))
pass

if __name__ == '__main__':
Expand Down
7 changes: 4 additions & 3 deletions tests/test_decorator.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import requests

from Pythine.pythine import Pythine
from functools import reduce

__author__ = 'zhengxu'

Expand All @@ -20,8 +21,8 @@ def benchmark_slow_network(test_time):
t1 = time.time()
ret = slow_network([url] * test_time, __pythine_thread_num=8)
t2 = time.time()
print "Without thread engine: %f" % (t1-t0)
print "With thread engine: %f" % (t2-t1)
print("Without thread engine: %f" % (t1-t0))
print("With thread engine: %f" % (t2-t1))
# check result
assert reduce(lambda x, y: x and bool(y), ret, True), "Some error occured!"
pass
Expand All @@ -32,7 +33,7 @@ def transparent_call():
t0 = time.time()
ret = slow_network(url)
t1 = time.time()
print "With thread engine but transparent call: %f" % (t1-t0)
print("With thread engine but transparent call: %f" % (t1-t0))
assert bool(ret), "No output"
pass

Expand Down