{"id":821,"date":"2008-06-28T10:54:33","date_gmt":"2008-06-28T01:54:33","guid":{"rendered":"http:\/\/openlook.org\/wp\/?p=821"},"modified":"2008-06-28T10:54:33","modified_gmt":"2008-06-28T01:54:33","slug":"python-multiprocessing","status":"publish","type":"post","link":"https:\/\/openlook.org\/wp\/python-multiprocessing\/","title":{"rendered":"&#8220;\ud30c\uc774\uc36c\uc740 \uba40\ud2f0\ucf54\uc5b4 \uc918\ub3c4 \uc4f0\uc798\ub370\uae30\uac00 \uc5c6\ub098\uc694?&#8221;\uc5d0 \ub300\ud55c \ud30c\uc774\uc36c 2.6\uc758 \ub300\ub2f5"},"content":{"rendered":"<p>\ubc14\uc57c\ud750\ub85c \ucd08\ub529\ub3c4 \uba40\ud2f0\ucf54\uc5b4\ub85c \uc624\ub77d\ud558\ub294 \uc2dc\ub300\uac00 \uc624\uba74\uc11c \uc774\uc81c \ud30c\uc774\uc36c GIL \uacf5\ud3ec\uac00<br \/>\n   \ub9ce\uc740 \uc0ac\ub78c\ub4e4\uc744 \uc704\ud611\ud558\uace0 \uc788\uc5c8\uc2b5\ub2c8\ub2e4. \uadf8\uc5d0 \ub300\ud55c \ud574\uacb0\ucc45\uc73c\ub85c \uc608\uc804\ubd80\ud130<br \/>\n   \ubcd1\ub82c \ud504\ub85c\uadf8\ub798\ubc0d\uc744 \uc704\ud55c \uc5ec\ub7ec\uac00\uc9c0 \ud504\ub808\uc784\uc6cc\ud06c, \uc608\ub97c \ub4e4\uc5b4<br \/>\n   <a href=\"http:\/\/mpi4py.scipy.org\/\">MPI<\/a>, CORBA, <a href=\"http:\/\/pyro.sourceforge.net\/\">PyRO<\/a> \uac19\uc740 \uac83\ub4e4\uc774 \ub098\uc654\uc9c0\ub9cc, \ub2e4\ub4e4 \uba4b\uc788\uac8c \ubaa8\ub4e0 \uac78 \ud3ec\uc6a9\ud558\ub294<br \/>\n   \ub77c\uc774\ube0c\ub7ec\ub9ac\ub97c \ub9cc\ub4e4\ub2e4 \ubcf4\ub2c8 \uc124\uce58\uac00 \uc5b4\ub835\uac70\ub098 \ubc30\uc6b0\ub294\ub370 \ud55c\ucc38 \uac78\ub9ac\ub294 \uac8c \uacb0\uad6d \ubb38\uc81c\uac00<br \/>\n   \ub3fc\uc11c \uc2e4\uc81c\ub85c \uc2ec\uac01\ud55c \uac1c\ubc1c\uc790 \uc544\ub2c8\uba74 \uadf8\ub0e5 &#8220;CPU 1\uac1c\uba74 \ucda9\ubd84\ud574\uc694&#8221;\ub77c\uace0 \ub208\uc744 \ubc18\uc9dd\uac70\ub9ac\uba70<br \/>\n   \uc2a4\uc2a4\ub85c \ucd5c\uba74\uc744 \uac78\uace0 \uc788\uc5c8\ub358 \uac83\uc774 \uc0ac\uc2e4\uc785\ub2c8\ub2e4~\n<\/p>\n<p>\uadf8\ub798\uc11c GIL\uc758 \ud30c\uc774\uc36c \ud504\ub85c\uc81d\ud2b8 \uc790\uccb4\uc5d0\uc11c\uc758 \ud574\uacb0\ucc45\uc73c\ub85c\ub294 \uacf5\uc2dd\uc801\uc73c\ub85c \uacb0\ub860\uc5d0 \ub3c4\ub2ec\ud55c<br \/>\n   \uac83\uc740 \uc544\ub2c8\uc9c0\ub9cc <a href=\"http:\/\/code.google.com\/p\/python-safethread\/\">Adam Olsen\uc758 GIL\uc5c6\uc560\uae30<\/a> \ud504\ub85c\uc81d\ud2b8 \uac19\uc740 \uac83\ub3c4 \uc788\uc5c8\ub294\ub370,<br \/>\n   \uc774\ubc88\uc5d0 \uba87\uba87 \uc0ac\ub78c\ub4e4\uc758 \uac15\ub825\ud55c \ud6c4\uc6d0\uc73c\ub85c \ud30c\uc774\uc36c 2.6\uacfc 3.0\ubd80\ud130<br \/>\n   <a href=\"http:\/\/pyprocessing.berlios.de\/\">pyProcessing<\/a>\uc774 \uc0c8 \uc774\ub984 multiprocessing<br \/>\n   \uc73c\ub85c \ud45c\uc900 \ub77c\uc774\ube0c\ub7ec\ub9ac\ub85c \ub4e4\uc5b4\uc624\uac8c \ub418\uc5c8\uc2b5\ub2c8\ub2e4.\n<\/p>\n<p>pyprocessing\uc758 \ub2e4\ub978 <a href=\"http:\/\/wiki.python.org\/moin\/ParallelProcessing\">\ubcd1\ub82c \ucc98\ub9ac \ub77c\uc774\ube0c\ub7ec\ub9ac\ub4e4<\/a>\uc5d0 \ub300\ud55c \uc7a5\uc810\uc740<br \/>\n   \ubb50\ub2c8\ubb50\ub2c8\ud574\ub3c4 <a href=\"http:\/\/docs.python.org\/lib\/module-threading.html\">\ud45c\uc900 threading<\/a> \ubaa8\ub4c8\uacfc API\uac00 \uac19\ub2e4\ub294 \uc810\uc774\uaca0\uc8e0. threading\uc73c\ub85c \uae30\uc874\uc5d0 \uc9dc \ub193\uc740<br \/>\n   \ud504\ub85c\uadf8\ub7a8\uc744 \uadf8\ub0e5 \ubaa8\ub4c8 \uc774\ub984\uacfc \ud074\ub798\uc2a4 \uc774\ub984 \uc544\uc8fc \uc57d\uac04\ub9cc \ubc14\uafd4\uc8fc\uba74 \uc4f0\ub808\ub529 \ub300\uc2e0 \uba40\ud2f0\ud504\ub85c\uc138\uc2f1\uc744<br \/>\n   \uc0ac\uc6a9\ud558\uac8c \ub418\uc5b4\uc11c \uacb0\uad6d\uc5d0\ub294 \uba40\ud2f0\ucf54\uc5b4\ub97c \uc81c\ub300\ub85c \uc4f0\ub294 \ud504\ub85c\uadf8\ub7a8\uc774 \ub429\ub2c8\ub2e4. \uc2e4\uc81c\ub85c<br \/>\n   \uc4f0\ub808\ub529\uac19\uc774 \ubaa8\ub4e0 \ubcc0\uc218\ub97c \uacf5\uc720\ud558\ub294 \uac83\uc740 \uc544\ub2c8\uace0, \ub9ac\ud134\uac12\ub9cc \uc804\ub2ec\uc744 \ubc1b\uae30 \ub54c\ubb38\uc5d0<br \/>\n   \uc815\ud655\ud788\ub294 \uc880 \ub2e4\ub974\ub2e4\uace0 \ubcfc \uc218\ub3c4 \uc788\uc9c0\ub9cc, \ubb50 &#8220;\uadf8\ub807\uac8c \uc9dc\uba74 \uc655\ubcc0\ud0dc&#8221;\ub77c\uace0 \uc120\uc5b8\ud558\uba74 \ub418\uaca0\uc8e0. \u314e\u314e;\n<\/p>\n<p>\uadf8\ub798\uc11c \uc2e4\uc81c\ub85c \uc4f0\ub294 \ubaa8\uc591\uc744 \ubcf4\ub824\uace0 \uc61b\ub0a0\uc5d0 \uc720\ud589\ud588\ub358 \uc815\uaddc\uc2dd\uc73c\ub85c \uc18c\uc218 \uac80\uc0ac\ub97c \ud558\ub294 \uac78 \ud55c \ubc88 \ub3cc\ub824 \ubd24\uc2b5\ub2c8\ub2e4.\n<\/p>\n<div class=\"codehilite\">\n<pre><span class=\"k\">from<\/span> <span class=\"nn\">multiprocessing<\/span> <span class=\"k\">import<\/span> <span class=\"n\">Process<\/span> <span class=\"k\">as<\/span> <span class=\"n\">worker<\/span>\n<span class=\"k\">import<\/span> <span class=\"nn\">re<\/span><span class=\"o\">,<\/span> <span class=\"nn\">time<\/span>\n\n<span class=\"k\">def<\/span> <span class=\"nf\">isprime<\/span><span class=\"p\">(<\/span><span class=\"n\">n<\/span><span class=\"p\">):<\/span>\n    <span class=\"n\">convert<\/span> <span class=\"o\">=<\/span> <span class=\"s\">&#39;&#39;<\/span><span class=\"o\">.<\/span><span class=\"n\">join<\/span><span class=\"p\">(<\/span><span class=\"s\">&#39;1&#39;<\/span> <span class=\"k\">for<\/span> <span class=\"n\">i<\/span> <span class=\"ow\">in<\/span> <span class=\"nb\">xrange<\/span><span class=\"p\">(<\/span><span class=\"n\">n<\/span><span class=\"p\">))<\/span>\n    <span class=\"k\">return<\/span> <span class=\"ow\">not<\/span> <span class=\"n\">re<\/span><span class=\"o\">.<\/span><span class=\"n\">match<\/span><span class=\"p\">(<\/span><span class=\"s\">r&#39;^1?$|^(11+?)\\1+$&#39;<\/span><span class=\"p\">,<\/span> <span class=\"n\">convert<\/span><span class=\"p\">)<\/span>\n\n<span class=\"n\">serial_st<\/span> <span class=\"o\">=<\/span> <span class=\"n\">time<\/span><span class=\"o\">.<\/span><span class=\"n\">time<\/span><span class=\"p\">()<\/span>\n<span class=\"k\">for<\/span> <span class=\"n\">i<\/span> <span class=\"ow\">in<\/span> <span class=\"nb\">range<\/span><span class=\"p\">(<\/span><span class=\"mf\">10<\/span><span class=\"p\">):<\/span>\n    <span class=\"n\">isprime<\/span><span class=\"p\">(<\/span><span class=\"mf\">1234567<\/span><span class=\"p\">)<\/span>\n<span class=\"k\">print<\/span> <span class=\"s\">&#39;Serial:&#39;<\/span><span class=\"p\">,<\/span> <span class=\"n\">time<\/span><span class=\"o\">.<\/span><span class=\"n\">time<\/span><span class=\"p\">()<\/span> <span class=\"o\">-<\/span> <span class=\"n\">serial_st<\/span>\n\n<span class=\"n\">parallel_st<\/span> <span class=\"o\">=<\/span> <span class=\"n\">time<\/span><span class=\"o\">.<\/span><span class=\"n\">time<\/span><span class=\"p\">()<\/span>\n<span class=\"n\">processes<\/span> <span class=\"o\">=<\/span> <span class=\"p\">[<\/span><span class=\"n\">worker<\/span><span class=\"p\">(<\/span><span class=\"n\">target<\/span><span class=\"o\">=<\/span><span class=\"n\">isprime<\/span><span class=\"p\">,<\/span> <span class=\"n\">args<\/span><span class=\"o\">=<\/span><span class=\"p\">(<\/span><span class=\"mf\">1234567<\/span><span class=\"p\">,))<\/span> <span class=\"k\">for<\/span> <span class=\"n\">i<\/span> <span class=\"ow\">in<\/span> <span class=\"nb\">range<\/span><span class=\"p\">(<\/span><span class=\"mf\">10<\/span><span class=\"p\">)]<\/span>\n<span class=\"p\">[<\/span><span class=\"n\">p<\/span><span class=\"o\">.<\/span><span class=\"n\">start<\/span><span class=\"p\">()<\/span> <span class=\"k\">for<\/span> <span class=\"n\">p<\/span> <span class=\"ow\">in<\/span> <span class=\"n\">processes<\/span><span class=\"p\">]<\/span>\n<span class=\"p\">[<\/span><span class=\"n\">p<\/span><span class=\"o\">.<\/span><span class=\"n\">join<\/span><span class=\"p\">()<\/span> <span class=\"k\">for<\/span> <span class=\"n\">p<\/span> <span class=\"ow\">in<\/span> <span class=\"n\">processes<\/span><span class=\"p\">]<\/span>\n<span class=\"k\">print<\/span> <span class=\"s\">&#39;Parallel:&#39;<\/span><span class=\"p\">,<\/span> <span class=\"n\">time<\/span><span class=\"o\">.<\/span><span class=\"n\">time<\/span><span class=\"p\">()<\/span> <span class=\"o\">-<\/span> <span class=\"n\">parallel_st<\/span>\n<\/pre>\n<\/div>\n<p>\ubcf4\uc2dc\uba74 threading\uc73c\ub85c \ub9cc\ub4e0 \ubaa8\ub4c8\uacfc join, start, worker \ub4f1\uc758 \uc0ac\uc6a9\ubc95\uc774 \uac19\uc544\uc11c \uadf8\ub0e5 \uc27d\uac8c \ubc14\uafb8\uc2e4 \uc218 \uc788\ub294\ub370, \uc774\ub807\uac8c \ub3cc\ub824\ubcf4\uba74 \ub300\ub7b5 \uc2dc\uac04\uc774 \ub4c0\uc5bc\ucf54\uc5b4\uc5d0\uc11c\ub294 \uc774\ub807\uac8c \ub098\uc635\ub2c8\ub2e4.\n<\/p>\n<div class=\"codehilite\">\n<pre>Serial: 18.2321028709\nParallel: 8.54528999329\n<\/pre>\n<\/div>\n<p>\ub300\ub7b5 2\ubc30 \uc815\ub3c4 \ube68\ub77c\uc84c\uc8e0~ \uadf8\ub0e5 \uace0\uc804\uc801\uc778 \ub358\uc838\uc8fc\uace0 \uc2e4\ud589\ud574\uc11c \ub9ac\ud134\ubc1b\ub294 \ubc29\uc2dd \ub9d0\uace0 \ubcf4\ud1b5<br \/>\n   \uc2e4\uc81c\ub85c \ub354 \ub9ce\uc774 \uc4f0\ub294 <a href=\"http:\/\/docs.python.org\/lib\/module-Queue.html\">Queue<\/a> \ubaa8\ub378\ub85c \uc77c\uafbc\uc744 \ucf54\uc5b4 \uac1c\uc218\ub9cc\ud07c \ub3cc\ub824\ubcf4\uba74 \uc774\ub807\uac8c \ud560 \uc218\ub3c4 \uc788\uc2b5\ub2c8\ub2e4.\n<\/p>\n<div class=\"codehilite\">\n<pre><span class=\"k\">from<\/span> <span class=\"nn\">multiprocessing<\/span> <span class=\"k\">import<\/span> <span class=\"n\">Process<\/span><span class=\"p\">,<\/span> <span class=\"n\">Queue<\/span>\n<span class=\"k\">import<\/span> <span class=\"nn\">re<\/span><span class=\"o\">,<\/span> <span class=\"nn\">time<\/span>\n\n<span class=\"n\">q<\/span> <span class=\"o\">=<\/span> <span class=\"n\">Queue<\/span><span class=\"p\">()<\/span>\n\n<span class=\"k\">def<\/span> <span class=\"nf\">isprime<\/span><span class=\"p\">(<\/span><span class=\"n\">n<\/span><span class=\"p\">):<\/span>\n    <span class=\"n\">convert<\/span> <span class=\"o\">=<\/span> <span class=\"s\">&#39;&#39;<\/span><span class=\"o\">.<\/span><span class=\"n\">join<\/span><span class=\"p\">(<\/span><span class=\"s\">&#39;1&#39;<\/span> <span class=\"k\">for<\/span> <span class=\"n\">i<\/span> <span class=\"ow\">in<\/span> <span class=\"nb\">xrange<\/span><span class=\"p\">(<\/span><span class=\"n\">n<\/span><span class=\"p\">))<\/span>\n    <span class=\"k\">return<\/span> <span class=\"ow\">not<\/span> <span class=\"n\">re<\/span><span class=\"o\">.<\/span><span class=\"n\">match<\/span><span class=\"p\">(<\/span><span class=\"s\">r&#39;^1?$|^(11+?)\\1+$&#39;<\/span><span class=\"p\">,<\/span> <span class=\"n\">convert<\/span><span class=\"p\">)<\/span>\n\n<span class=\"k\">def<\/span> <span class=\"nf\">primeworker<\/span><span class=\"p\">():<\/span>\n    <span class=\"k\">while<\/span> <span class=\"bp\">True<\/span><span class=\"p\">:<\/span>\n        <span class=\"n\">n<\/span> <span class=\"o\">=<\/span> <span class=\"n\">q<\/span><span class=\"o\">.<\/span><span class=\"n\">get<\/span><span class=\"p\">()<\/span>\n        <span class=\"n\">isprime<\/span><span class=\"p\">(<\/span><span class=\"n\">n<\/span><span class=\"p\">)<\/span>\n        <span class=\"k\">print<\/span> <span class=\"n\">time<\/span><span class=\"o\">.<\/span><span class=\"n\">time<\/span><span class=\"p\">()<\/span> <span class=\"o\">-<\/span> <span class=\"n\">parallel_st<\/span>\n\n<span class=\"n\">parallel_st<\/span> <span class=\"o\">=<\/span> <span class=\"n\">time<\/span><span class=\"o\">.<\/span><span class=\"n\">time<\/span><span class=\"p\">()<\/span>\n<span class=\"n\">processes<\/span> <span class=\"o\">=<\/span> <span class=\"p\">[<\/span><span class=\"n\">Process<\/span><span class=\"p\">(<\/span><span class=\"n\">target<\/span><span class=\"o\">=<\/span><span class=\"n\">primeworker<\/span><span class=\"p\">)<\/span> <span class=\"k\">for<\/span> <span class=\"n\">i<\/span> <span class=\"ow\">in<\/span> <span class=\"nb\">range<\/span><span class=\"p\">(<\/span><span class=\"mf\">2<\/span><span class=\"p\">)]<\/span>\n<span class=\"p\">[<\/span><span class=\"n\">p<\/span><span class=\"o\">.<\/span><span class=\"n\">start<\/span><span class=\"p\">()<\/span> <span class=\"k\">for<\/span> <span class=\"n\">p<\/span> <span class=\"ow\">in<\/span> <span class=\"n\">processes<\/span><span class=\"p\">]<\/span>\n<span class=\"k\">for<\/span> <span class=\"n\">i<\/span> <span class=\"ow\">in<\/span> <span class=\"nb\">range<\/span><span class=\"p\">(<\/span><span class=\"mf\">10<\/span><span class=\"p\">):<\/span>\n    <span class=\"n\">q<\/span><span class=\"o\">.<\/span><span class=\"n\">put<\/span><span class=\"p\">(<\/span><span class=\"mf\">1234567<\/span><span class=\"p\">)<\/span>\n<span class=\"p\">[<\/span><span class=\"n\">p<\/span><span class=\"o\">.<\/span><span class=\"n\">join<\/span><span class=\"p\">()<\/span> <span class=\"k\">for<\/span> <span class=\"n\">p<\/span> <span class=\"ow\">in<\/span> <span class=\"n\">processes<\/span><span class=\"p\">]<\/span>\n<\/pre>\n<\/div>\n<p>\uc2dc\uac04\uc740 \ub300\ub7b5 9\ucd08 \uc815\ub3c4 \ub4ed\ub2c8\ub2e4. \uadf8\ub9ac\uace0 fd \ub118\uaca8\uc8fc\uae30\ub97c \uc9c0\uc6d0\ud558\ub294 \ud50c\ub7ab\ud3fc\ub4e4\uc5d0\uc11c\ub294 \uc18c\ucf13\ub3c4<br \/>\n   \ubc1b\uc544\ub2e4\uac00 \ub118\uae38 \uc218\uac00 \uc788\uc73c\ub2c8 \ub124\ud2b8\uc6cc\ud06c \ud504\ub85c\uadf8\ub7a8\ub3c4 \uac04\ub2e8\ud558\uac8c \uba40\ud2f0\ucf54\uc5b4\ub97c \uc4f8 \uc218 \uc788\uc2b5\ub2c8\ub2e4.\n<\/p>\n<p>\uc544\uc8fc \uac04\ub2e8\ud558\uac8c \uba40\ud2f0\ucf54\uc5b4\ub97c \uc4f8 \uc218 \uc788\ub294 \uc7a5\uc810\uc73c\ub85c \ud45c\uc900 \ub77c\uc774\ube0c\ub7ec\ub9ac\ub85c \ub3c4\uc785\uc774 \ub418\uae34 \ud588\uc9c0\ub9cc,<br \/>\n   \uc544\uc9c1 \ubb38\uc81c\uac00 \uba87 \uac1c \uc788\ub294\ub370\uc694. \ub300\ud45c\uc801\uc73c\ub85c FreeBSD\uc5d0\uc11c\ub294 \uc544\uc9c1 POSIX 1003.1b \uc138\ub9c8\ud3ec\uc5b4\ub97c &#8220;\uc81c\ub300\ub85c&#8221; \uc9c0\uc6d0\ud558\uc9c0 \uc54a\uae30 \ub54c\ubb38\uc5d0 FreeBSD\uc5d0\uc11c\ub294 Queue\ub098 Lock\ub4f1\uacfc \uad00\ub828\ub41c \uac83\ub4e4\uc744<br \/>\n   \ud558\ub098\ub3c4 \uc4f8 \uc218\uac00 \uc5c6\uc2b5\ub2c8\ub2e4. (\uc704 \uc608\uc81c\ub294 \uadf8\ub798\uc11c \ub9ac\ub205\uc2a4\uc5d0\uc11c \ud14c\uc2a4\ud2b8\ud560 \uc218 \ubc16\uc5d0 \uc5c6\uc5c8\uc2b5\ub2c8\ub2e4;;)\n<\/p>\n<p>\uadf8 \uc678\uc5d0 MPI \ub4f1\uc758 &#8220;\uc2ec\uac01\ud55c&#8221; \ubd84\uc0b0 API\ub4e4\uc744 \uc4f0\ub358 \ud504\ub85c\uadf8\ub798\uba38\ub4e4\uc740 \uc774\uac8c \uc560\ub4e4 \uc7a5\ub09c\uc774\ub0d0 \ud558\uba74\uc11c \uc5c6\ub294 \uae30\ub2a5\ub4e4\uc744 \uc9c0\uc801\ud560 \uc218\ub3c4 \uc788\ub294\ub370, \uc544\ubb34\ub798\ub3c4 \ud45c\uc900 \ub77c\uc774\ube0c\ub7ec\ub9ac\ub85c\uc368 \uc544\uc8fc \uac04\ub2e8\ud558\uace0<br \/>\n   \uae30\ucd08\uc801\uc778 \uae30\ub2a5\ub9cc \uc81c\uacf5\ud558\ub294 \uac83\uc774 \ubaa9\uc801\uc774\uace0, \uc14b\uc5c5\uc774 \ubcf5\uc7a1\ud558\uac70\ub098 \uac70\ub300 \ud504\ub808\uc784\uc6cc\ud06c\ub97c \ub04c\uace0 \ub2e4\ub2c8\ub294 \uacbd\uc6b0\ub77c\uba74 \ud45c\uc900\uc5d0\uc11c \uc548\uc815\uc801\uc73c\ub85c \uad00\ub9ac\ud558\uae30\uac00 \ud798\ub4e4\uaca0\uc8e0. \uadf8\ub798\uc11c multiprocessing\uc744<br \/>\n   \ub3c4\uc785\ud558\uc790 \uc8fc\uc7a5\ud55c \uac1c\ubc1c\uc790\ub294 \uc774 \ubaa8\ub4c8\uc740 \uc808\ub300 \ub2e4\ub978 \ubd84\uc0b0 \uad00\ub828 \ubaa8\ub4c8\uc744 \uc4f0\uc9c0 \ub9d0\ub77c\ub294 \uc758\ubbf8\uac00 \uc544\ub2c8\uace0<br \/>\n   \uac19\uc774 \uc4f0\uba74 \ub354\uc6b1 \uc88b\ub2e4\uace0 \uac15\uc870\ud569\ub2c8\ub2e4.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\ubc14\uc57c\ud750\ub85c \ucd08\ub529\ub3c4 \uba40\ud2f0\ucf54\uc5b4\ub85c \uc624\ub77d\ud558\ub294 \uc2dc\ub300\uac00 \uc624\uba74\uc11c \uc774\uc81c \ud30c\uc774\uc36c GIL \uacf5\ud3ec\uac00 \ub9ce\uc740 \uc0ac\ub78c\ub4e4\uc744 \uc704\ud611\ud558\uace0 \uc788\uc5c8\uc2b5\ub2c8\ub2e4. \uadf8\uc5d0 \ub300\ud55c \ud574\uacb0\ucc45\uc73c\ub85c \uc608\uc804\ubd80\ud130 \ubcd1\ub82c \ud504\ub85c\uadf8\ub798\ubc0d\uc744 \uc704\ud55c \uc5ec\ub7ec\uac00\uc9c0 \ud504\ub808\uc784\uc6cc\ud06c, \uc608\ub97c \ub4e4\uc5b4 MPI, CORBA, PyRO \uac19\uc740 \uac83\ub4e4\uc774 \ub098\uc654\uc9c0\ub9cc, \ub2e4\ub4e4 \uba4b\uc788\uac8c \ubaa8\ub4e0 \uac78 \ud3ec\uc6a9\ud558\ub294 \ub77c\uc774\ube0c\ub7ec\ub9ac\ub97c \ub9cc\ub4e4\ub2e4 \ubcf4\ub2c8 \uc124\uce58\uac00 \uc5b4\ub835\uac70\ub098 \ubc30\uc6b0\ub294\ub370 \ud55c\ucc38 \uac78\ub9ac\ub294 \uac8c \uacb0\uad6d \ubb38\uc81c\uac00 \ub3fc\uc11c \uc2e4\uc81c\ub85c \uc2ec\uac01\ud55c \uac1c\ubc1c\uc790 \uc544\ub2c8\uba74 \uadf8\ub0e5 &#8220;CPU 1\uac1c\uba74 &#8230; <a title=\"&#8220;\ud30c\uc774\uc36c\uc740 \uba40\ud2f0\ucf54\uc5b4 \uc918\ub3c4 \uc4f0\uc798\ub370\uae30\uac00 \uc5c6\ub098\uc694?&#8221;\uc5d0 \ub300\ud55c \ud30c\uc774\uc36c 2.6\uc758 \ub300\ub2f5\" class=\"read-more\" href=\"https:\/\/openlook.org\/wp\/python-multiprocessing\/\" aria-label=\"Read more about &#8220;\ud30c\uc774\uc36c\uc740 \uba40\ud2f0\ucf54\uc5b4 \uc918\ub3c4 \uc4f0\uc798\ub370\uae30\uac00 \uc5c6\ub098\uc694?&#8221;\uc5d0 \ub300\ud55c \ud30c\uc774\uc36c 2.6\uc758 \ub300\ub2f5\">Read more<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4],"tags":[],"class_list":["post-821","post","type-post","status-publish","format-standard","hentry","category-python"],"_links":{"self":[{"href":"https:\/\/openlook.org\/wp\/wp-json\/wp\/v2\/posts\/821","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/openlook.org\/wp\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/openlook.org\/wp\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/openlook.org\/wp\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/openlook.org\/wp\/wp-json\/wp\/v2\/comments?post=821"}],"version-history":[{"count":0,"href":"https:\/\/openlook.org\/wp\/wp-json\/wp\/v2\/posts\/821\/revisions"}],"wp:attachment":[{"href":"https:\/\/openlook.org\/wp\/wp-json\/wp\/v2\/media?parent=821"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/openlook.org\/wp\/wp-json\/wp\/v2\/categories?post=821"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/openlook.org\/wp\/wp-json\/wp\/v2\/tags?post=821"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}