[devel] Как пройти сборку если требуется /dev/shm ?

Andrew V. Stepanov stanv на altlinux.ru
Вт Дек 30 17:53:59 MSK 2014


Как выяснилось, Python тут ни причем.

Рассмотрим компьютер в котором один однопоточный процессор, с одним ядром.

И рассмотрим семафор Posix.

$ cat 1.c
#include <semaphore.h>
#include <stdio.h>
#include <errno.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>

#include <sys/stat.h>
#include <fcntl.h>
#include <sys/mman.h>

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.


Подробная информация о списке рассылки Devel