Wpis z mikrobloga

@FantaZy: żeby miało to sens, to musiałbyś użyć multiprocessing. Ale overhead z odpalania procesów prawdopodobnie będzie na tyle duży, że minie się to z celem i koniec końców będziesz to liczył dłużej.
@zwei: no wlasnie o tym myslalem zeby uzyc multiprocessing.
czytalem jeszcze ze jest cos takiego jak sharedmem... wiec moze zamiast procesow latwiej odpalic wątki ktore współdzielą pamięć?
@max_power: GIL wymusza działanie interpretera w jednym wątku. Tzn. jak będziesz miał w pythonie kilka wątków w danym programie, to będą działać tylko na jednym rdzeniu. Czyli jeden rdzeń będzie wykonywał to, co miał wykonywać i tak, a dodatkowo będzie bez sensu zajmował czas przełączaniem tychże wątków.
@FantaZy:
sum(range(99999999)) 2.58 s ± 20 ms per loop (mean ± std. dev. of 2 runs, 1 loop each)
a jak niechcesz sie bawic w pisanie w c to polecam numbe -> http://numba.pydata.org/

moj kod do liczenia

from numba import jit
@jit(nopython=True)
def fast_calc(sum_ran: int):
calc_sum = 0
for i, k in enumerate(range(sum_ran)):
calc_sum += i
return calc_sum

%timeit -n 5 -r 20 fast_calc(99999999)
156 ns ± 93.1 ns per
@m_bielawski: numba używa llvm, który jest na tyle mądry, żeby zamienić taki kod na sumę ciągu arytmetycznego. Przykładowy kod w c kombilowany przez llvm generuje się do czegoś takiego: https://gcc.godbolt.org/z/Fm9e4y . Widać w assemblerze, że nie mamy pętli oraz wykonywane jest mnożenie (imul) i dzielenie przez 2 (shr)