Skip to content

Commit dabc6cd

Browse files
author
hartsantler
committed
main will relay append messages from one webworker to another.
1 parent d4400de commit dabc6cd

3 files changed

Lines changed: 62 additions & 9 deletions

File tree

pythonjs/python_to_pythonjs.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -297,8 +297,8 @@ def visit_Import(self, node):
297297
for alias in node.names:
298298
if alias.name == 'threading':
299299
self._use_threading = True
300-
writer.write( 'Worker = require("/usr/local/lib/node_modules/workerjs")')
301-
#writer.write( 'Worker = require("workerjs")')
300+
#writer.write( 'Worker = require("/usr/local/lib/node_modules/workerjs")')
301+
writer.write( 'Worker = require("workerjs")')
302302

303303
else:
304304
#writer.write( '## import: %s :: %s' %(alias.name, alias.asname) )

pythonjs/pythonjs.js

Lines changed: 43 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// PythonJS Runtime - regenerated on: Tue May 27 18:23:04 2014
1+
// PythonJS Runtime - regenerated on: Wed May 28 15:59:59 2014
22
__NULL_OBJECT__ = Object.create(null);
33
if (( "window" ) in this && ( "document" ) in this) {
44
__WEBWORKER__ = false;
@@ -3491,10 +3491,41 @@ __lambda__.args_signature = ["o"];
34913491
__lambda__.kwargs_signature = { };
34923492
__lambda__.types_signature = { };
34933493
json = __jsdict([["loads", null], ["dumps", null]]);
3494-
threading = __jsdict([]);
3494+
__get_other_workers_with_shared_arg = function(worker, ob) {
3495+
var a, other, args;
3496+
a = [];
3497+
var __iter21 = threading.workers;
3498+
if (! (__iter21 instanceof Array || typeof __iter21 == "string") ) { __iter21 = __object_keys__(__iter21) }
3499+
for (var __idx21=0; __idx21 < __iter21.length; __idx21++) {
3500+
var b = __iter21[ __idx21 ];
3501+
other = b[(("worker".__uid__) ? "worker".__uid__ : "worker")];
3502+
args = b[(("args".__uid__) ? "args".__uid__ : "args")];
3503+
if (( other ) !== worker) {
3504+
var __iter22 = args;
3505+
if (! (__iter22 instanceof Array || typeof __iter22 == "string") ) { __iter22 = __object_keys__(__iter22) }
3506+
for (var __idx22=0; __idx22 < __iter22.length; __idx22++) {
3507+
var arg = __iter22[ __idx22 ];
3508+
if (( arg ) === ob) {
3509+
if (! (__contains__(a, other))) {
3510+
a.append(other);
3511+
}
3512+
}
3513+
}
3514+
}
3515+
}
3516+
return a;
3517+
}
3518+
3519+
__get_other_workers_with_shared_arg.NAME = "__get_other_workers_with_shared_arg";
3520+
__get_other_workers_with_shared_arg.args_signature = ["worker", "ob"];
3521+
__get_other_workers_with_shared_arg.kwargs_signature = { };
3522+
__get_other_workers_with_shared_arg.types_signature = { };
3523+
threading = __jsdict([["workers", []]]);
34953524
__start_new_thread = function(f, args) {
34963525
var jsargs, worker;
34973526
worker = new Worker(f);
3527+
worker.__uid__ = len(threading.workers);
3528+
threading.workers.append(__jsdict([["worker", worker], ["args", args]]));
34983529
var func = function(event) {
34993530
var a, value;
35003531
if (( event.data.type ) == "terminate") {
@@ -3503,6 +3534,12 @@ __start_new_thread = function(f, args) {
35033534
if (( event.data.type ) == "append") {
35043535
a = args[((event.data.argindex.__uid__) ? event.data.argindex.__uid__ : event.data.argindex)];
35053536
a.push(event.data.value);
3537+
var __iter23 = __get_other_workers_with_shared_arg(worker, a);
3538+
if (! (__iter23 instanceof Array || typeof __iter23 == "string") ) { __iter23 = __object_keys__(__iter23) }
3539+
for (var __idx23=0; __idx23 < __iter23.length; __idx23++) {
3540+
var other = __iter23[ __idx23 ];
3541+
other.postMessage(__jsdict([["type", "append"], ["argindex", event.data.argindex], ["value", event.data.value]]));
3542+
}
35063543
} else {
35073544
if (( event.data.type ) == "__setitem__") {
35083545
a = args[((event.data.argindex.__uid__) ? event.data.argindex.__uid__ : event.data.argindex)];
@@ -3527,10 +3564,10 @@ __start_new_thread = function(f, args) {
35273564
jsargs = [];
35283565
var i;
35293566
i = 0;
3530-
var __iter21 = args;
3531-
if (! (__iter21 instanceof Array || typeof __iter21 == "string") ) { __iter21 = __object_keys__(__iter21) }
3532-
for (var __idx21=0; __idx21 < __iter21.length; __idx21++) {
3533-
var arg = __iter21[ __idx21 ];
3567+
var __iter24 = args;
3568+
if (! (__iter24 instanceof Array || typeof __iter24 == "string") ) { __iter24 = __object_keys__(__iter24) }
3569+
for (var __idx24=0; __idx24 < __iter24.length; __idx24++) {
3570+
var arg = __iter24[ __idx24 ];
35343571
if (__test_if_true__(arg.jsify)) {
35353572
jsargs.append(arg.jsify());
35363573
} else {

pythonjs/runtime/builtins.py

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1292,11 +1292,25 @@ def to_ascii(self):
12921292
'loads': lambda s: JSON.parse(s),
12931293
'dumps': lambda o: JSON.stringify(o)
12941294
}
1295-
threading = {}
1295+
def __get_other_workers_with_shared_arg( worker, ob ):
1296+
a = []
1297+
for b in threading.workers:
1298+
other = b['worker']
1299+
args = b['args']
1300+
if other is not worker:
1301+
for arg in args:
1302+
if arg is ob:
1303+
if other not in a:
1304+
a.append( other )
1305+
return a
1306+
1307+
threading = {'workers': [] }
12961308

12971309

12981310
def __start_new_thread(f, args):
12991311
worker = new(Worker(f))
1312+
worker.__uid__ = len( threading.workers )
1313+
threading.workers.append( {'worker':worker,'args':args} )
13001314

13011315
def func(event):
13021316
#print('got signal from thread')
@@ -1307,6 +1321,8 @@ def func(event):
13071321
#print('got append event')
13081322
a = args[ event.data.argindex ]
13091323
a.push( event.data.value )
1324+
for other in __get_other_workers_with_shared_arg(worker, a):
1325+
other.postMessage( {'type':'append', 'argindex':event.data.argindex, 'value':event.data.value} )
13101326

13111327
elif event.data.type == '__setitem__':
13121328
#print('got __setitem__ event')

0 commit comments

Comments
 (0)