From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Message-ID: <54A2AE77.9060205@altlinux.ru> Date: Tue, 30 Dec 2014 16:53:59 +0300 From: "Andrew V. Stepanov" User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.10; rv:31.0) Gecko/20100101 Thunderbird/31.3.0 MIME-Version: 1.0 To: devel@lists.altlinux.org References: <54A165FA.2010604@altlinux.ru> In-Reply-To: <54A165FA.2010604@altlinux.ru> Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 8bit Subject: Re: [devel] =?utf-8?b?0JrQsNC6INC/0YDQvtC50YLQuCDRgdCx0L7RgNC60YMg?= =?utf-8?b?0LXRgdC70Lgg0YLRgNC10LHRg9C10YLRgdGPIC9kZXYvc2htID8=?= X-BeenThere: devel@lists.altlinux.org X-Mailman-Version: 2.1.12 Precedence: list Reply-To: ALT Linux Team development discussions List-Id: ALT Linux Team development discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 30 Dec 2014 13:54:01 -0000 Archived-At: List-Archive: List-Post: Как выяснилось, Python тут ни причем. Рассмотрим компьютер в котором один однопоточный процессор, с одним ядром. И рассмотрим семафор Posix. $ cat 1.c #include #include #include #include #include #include #include #include #include int main(int argc, char **argv) { sem_t *mutex; if ((mutex = sem_open("mysemaphore", O_CREAT, 0644, 1)) == SEM_FAILED) { perror("semaphore initilization"); exit(1); } exit(0); } $ gcc 1.c -lpthread $ ./a.out semaphore initilization: Function not implemented Т.е. POSIX семафоры в Linux хотят /dev/shm Хотеть семафор даже на однопроцессорной машине __вполне законно__. Python multiprocessing модуль написан с использованием POSIX семафоров, что также вполне законно. Что видно: File "/usr/src/RPM/BUILD/bro-2.3.1/aux/btest/btest", line 198, in runSubprocess q = multiprocessing.Queue() File "/usr/lib64/python2.7/multiprocessing/__init__.py", line 218, in Queue return Queue(maxsize) File "/usr/lib64/python2.7/multiprocessing/queues.py", line 63, in __init__ self._rlock = Lock() File "/usr/lib64/python2.7/multiprocessing/synchronize.py", line 147, in __init__ SemLock.__init__(self, SEMAPHORE, 1, 1) File "/usr/lib64/python2.7/multiprocessing/synchronize.py", line 75, in __init__ sl = self._semlock = _multiprocessing.SemLock(kind, value, maxvalue) OSError: [Errno 38] Function not implemented Семафоры нужны даже на однопоточных машинах. А POSIX семафоры хотят /dev/shm В конкретно в моем случае: http://git.altlinux.org/gears/p/python.git?p=python.git;a=blob;f=Python/Modules/_multiprocessing/semaphore.c;h=b9e8f345fbb1cd70918fb960377dadaea46fd8f3;hb=55198a185eef2089e6f4eba8654c5d9047a3c3a7#l195 Вывод: Hasher запрещает использование POSIX named semaphore.