blueloveTH hai 10 meses
pai
achega
b12d2bc4cc
Modificáronse 4 ficheiros con 28 adicións e 20 borrados
  1. 2 2
      docs/features/threading.md
  2. 13 5
      include/typings/pkpy.pyi
  3. 9 9
      src/modules/pkpy.c
  4. 4 4
      tests/98_thread.py

+ 2 - 2
docs/features/threading.md

@@ -69,10 +69,10 @@ thread = ComputeThread(1)
 print("Game Start")
 
 # import worldgen.py
-thread.exec_blocked('from worldgen import gen_world')
+thread.exec('from worldgen import gen_world')
 
 print("Submit WorldGen Job")
-thread.call('gen_world', 3, (100, 100), 10)
+thread.submit_call('gen_world', 3, (100, 100), 10)
 
 # wait for worldgen to finish
 for i in range(1, 100000):

+ 13 - 5
include/typings/pkpy.pyi

@@ -35,9 +35,17 @@ class ComputeThread:
     def last_error(self) -> str | None: ...
     def last_retval(self): ...
 
-    def exec(self, source: str) -> None: ...
-    def eval(self, source: str) -> None: ...
-    def call(self, eval_src: str, *args, **kwargs) -> None: ...
+    def submit_exec(self, source: str) -> None:
+        """Submit a job to execute some source code."""
 
-    def exec_blocked(self, source: str) -> None: ...
-    def eval_blocked(self, source: str): ...
+    def submit_eval(self, source: str) -> None:
+        """Submit a job to evaluate some source code."""
+
+    def submit_call(self, eval_src: str, *args, **kwargs) -> None:
+        """Submit a job to call a function with arguments."""
+
+    def exec(self, source: str) -> None:
+        """Directly execute some source code."""
+
+    def eval(self, source: str):
+        """Directly evaluate some source code."""

+ 9 - 9
src/modules/pkpy.c

@@ -271,7 +271,7 @@ __ERROR:
     return (c11_thrd_retval_t)0;
 }
 
-static bool ComputeThread_exec(int argc, py_Ref argv) {
+static bool ComputeThread_submit_exec(int argc, py_Ref argv) {
     PY_CHECK_ARGC(2);
     c11_ComputeThread* self = py_touserdata(py_arg(0));
     if(!self->is_done) return OSError("thread is not done yet");
@@ -294,7 +294,7 @@ static bool ComputeThread_exec(int argc, py_Ref argv) {
     return true;
 }
 
-static bool ComputeThread_eval(int argc, py_Ref argv) {
+static bool ComputeThread_submit_eval(int argc, py_Ref argv) {
     PY_CHECK_ARGC(2);
     c11_ComputeThread* self = py_touserdata(py_arg(0));
     if(!self->is_done) return OSError("thread is not done yet");
@@ -317,7 +317,7 @@ static bool ComputeThread_eval(int argc, py_Ref argv) {
     return true;
 }
 
-static bool ComputeThread_call(int argc, py_Ref argv) {
+static bool ComputeThread_submit_call(int argc, py_Ref argv) {
     PY_CHECK_ARGC(4);
     c11_ComputeThread* self = py_touserdata(py_arg(0));
     if(!self->is_done) return OSError("thread is not done yet");
@@ -383,7 +383,7 @@ __ERROR:
     return false;
 }
 
-static bool ComputeThread_exec_blocked(int argc, py_Ref argv) {
+static bool ComputeThread_exec(int argc, py_Ref argv) {
     PY_CHECK_ARGC(2);
     c11_ComputeThread* self = py_touserdata(py_arg(0));
     PY_CHECK_ARG_TYPE(1, tp_str);
@@ -391,7 +391,7 @@ static bool ComputeThread_exec_blocked(int argc, py_Ref argv) {
     return c11_ComputeThread__exec_blocked(self, source, EXEC_MODE);
 }
 
-static bool ComputeThread_eval_blocked(int argc, py_Ref argv) {
+static bool ComputeThread_eval(int argc, py_Ref argv) {
     PY_CHECK_ARGC(2);
     c11_ComputeThread* self = py_touserdata(py_arg(0));
     PY_CHECK_ARG_TYPE(1, tp_str);
@@ -409,12 +409,12 @@ static void pk_ComputeThread__register(py_Ref mod) {
     py_bindmethod(type, "last_error", ComputeThread_last_error);
     py_bindmethod(type, "last_retval", ComputeThread_last_retval);
 
+    py_bindmethod(type, "submit_exec", ComputeThread_submit_exec);
+    py_bindmethod(type, "submit_eval", ComputeThread_submit_eval);
+    py_bind(py_tpobject(type), "submit_call(self, eval_src, *args, **kwargs)", ComputeThread_submit_call);
+
     py_bindmethod(type, "exec", ComputeThread_exec);
     py_bindmethod(type, "eval", ComputeThread_eval);
-    py_bind(py_tpobject(type), "call(self, eval_src, *args, **kwargs)", ComputeThread_call);
-
-    py_bindmethod(type, "exec_blocked", ComputeThread_exec_blocked);
-    py_bindmethod(type, "eval_blocked", ComputeThread_eval_blocked);
 }
 
 void pk__add_module_pkpy() {

+ 4 - 4
tests/98_thread.py

@@ -5,7 +5,7 @@ thread_1 = ComputeThread(1)
 thread_2 = ComputeThread(2)
 
 for t in [thread_1, thread_2]:
-    t.exec_blocked('''
+    t.exec('''
 def func(a):
     from pkpy import currentvm
     print("Hello from thread", currentvm(), "a =", a)
@@ -16,13 +16,13 @@ def func(a):
                    
 x = 123
 ''')
-assert thread_1.eval_blocked('x') == 123
+assert thread_1.eval('x') == 123
 
 # thread_1.wait_for_done()
 # thread_2.wait_for_done()
 
-thread_1.call('func', [1, 2, 3])
-thread_2.call('func', [4, 5, 6])
+thread_1.submit_call('func', [1, 2, 3])
+thread_2.submit_call('func', [4, 5, 6])
 
 while not thread_1.is_done or not thread_2.is_done:
     print("Waiting for threads to finish...")