是否可以在同一个子进程下处理回调?

时间:2017-12-20 07:05:55

标签: python concurrent.futures

JSONArray jsonarray = jsonObj.getJSONArray("data");

for (int i = 0; i < jsonarray.length(); i++) {
    JSONObject innerJsonObject= jsonarray.getJSONObject(i);
    String skills = innerJsonObject.getString("skills");
    String platforms = innerJsonObject.getString("platforms");
}

代码如上所示,输出如下:

from concurrent.futures import ProcessPoolExecutor
import threading
import os


def task():
    print('Task: in thread', threading.current_thread())
    print('Task: in process', os.getpid())


def taskDone(fn):
    print('Callback: in thread', threading.current_thread())
    print('Callback: in process', os.getpid())


def main():
    print('Main: in thread', threading.current_thread())
    print('Main: in process', os.getpid())
    with ProcessPoolExecutor(max_workers=3) as executor:
        future = executor.submit(task)
        future.add_done_callback(taskDone)


if __name__ == '__main__':
    main()

问题:

  1. 为什么Task和Main中的线程号相同?那么我们需要使用进程id和线程来区分线程吗? (似乎单独的线程ID是不够的)
  2. 是否可以在与Task相同的过程中进行回调功能,以便他们可以共享某些内容?对于这种情况,我只是尽可能简单。但是有可能吗?
  3. 欢迎对这两个问题中的任何一个问题进行回答和讨论。

0 个答案:

没有答案