2023-09-09, 11:38
  #181
Medlem
Citat:
Ursprungligen postat av Enterprise
Det är en underprocess som skapas för att kunna iterera fler rader parallellt.

Hmm, vad får du för output om du i Spyder kör följande skript:
Kod:
import sys

print("Python version")
print(sys.version)
print("Version info.")
print(sys.version_info)

Python version
3.11.4 | packaged by Anaconda, Inc. | (main, Jul 5 2023, 13:38:37) [MSC v.1916 64 bit (AMD64)]
Version info.
sys.version_info(major=3, minor=11, micro=4, releaselevel='final', serial=0)
Citera
2023-09-09, 11:46
  #182
Medlem
Enterprises avatar
Citat:
Ursprungligen postat av Mysadname
Python version
3.11.4 | packaged by Anaconda, Inc. | (main, Jul 5 2023, 13:38:37) [MSC v.1916 64 bit (AMD64)]
Version info.
sys.version_info(major=3, minor=11, micro=4, releaselevel='final', serial=0)
Lustigt. Jag har EXAKT samma version av Python i samma Conda/Spyder-miljö på min Windows-burk.
Skriptet tuggar på hur fint som helst hos mig.

Python version
3.11.4 | packaged by Anaconda, Inc. | (main, Jul 5 2023, 13:38:37) [MSC v.1916 64 bit (AMD64)]
Version info.
sys.version_info(major=3, minor=11, micro=4, releaselevel='final', serial=0)
Citera
2023-09-09, 11:49
  #183
Medlem
Citat:
Ursprungligen postat av Enterprise
Lustigt. Jag har EXAKT samma version av Python i samma Conda/Spyder-miljö på min Windows-burk.
Skriptet tuggar på hur fint som helst hos mig.

Python version
3.11.4 | packaged by Anaconda, Inc. | (main, Jul 5 2023, 13:38:37) [MSC v.1916 64 bit (AMD64)]
Version info.
sys.version_info(major=3, minor=11, micro=4, releaselevel='final', serial=0)

Jag har nu även testat på min gamla burk med win 10 och 32 Gb ram men får samma felmeddelande där, är du säker att det inte är någon extension som saknas ?
Citera
2023-09-09, 11:49
  #184
Medlem
Enterprises avatar
På min stora Windows-rigg (med 16 virtuella kärnor) så går det rejält fort:

Spelform? 1= Stryktipset 2= Europatipset 3= Fullträff 3
Önskad summa (t.ex. 200.0) ? 200
Tolerabel +/- avvikelse decimaltal (t.ex. 0.05)? 0.001
Tryck 1 för text-fil och 2 för CSV-fil: 1
Fullträff omgång 50:
Default number of workers: 16
Length of chunks: 13061
Executor is using 16 workers
Time taken: 56.21 seconds
Avg. time: 0.1993 sec/million iterations
tips.txt skapad med 10000 rader!
Citera
2023-09-09, 11:52
  #185
Medlem
Enterprises avatar
Citat:
Ursprungligen postat av Mysadname
Jag har nu även testat på min gamla burk med win 10 och 32 Gb ram men får samma felmeddelande där, är du säker att det inte är någon extension som saknas ?
Nja, om någon modul saknas så ska du få felmeddelande.

Om du öppnar "Anaconda Prompt" från Start menyn och kör följande kommando, vad får du ut då:
Kod:
conda list
Citera
2023-09-09, 11:58
  #186
Medlem
Citat:
Ursprungligen postat av Enterprise
Nja, om någon modul saknas så ska du få felmeddelande.

Om du öppnar "Anaconda Prompt" från Start menyn och kör följande kommando, vad får du ut då:
Kod:
conda list

28456 tecken, något särskilt jag ska leta efter ?
Det är ju max 10000 tecken som gäller här
__________________
Senast redigerad av Mysadname 2023-09-09 kl. 12:05.
Citera
2023-09-09, 12:05
  #187
Medlem
Enterprises avatar
Citat:
Ursprungligen postat av Mysadname
28456 tecken, något särskilt jag ska leta efter ?
Nja, tänkte om det var någon modul som var i fel version, men det känns som är Multiprocess-delen som spökar och den är inbyggd i Pythons stanrdardbibliotek så det borde inte var det.

Men kolla om du har rätt version av requests där, på min står det:
requests 2.31.0

Ett sista försök:
Testa att ändra max_num_of_workes på rad 24 i skriptet och kör igen:

Kod:
def main():
	
	max_num_of_workers = 1 # ändras för att ändra antalet parallella processer

På min Windows-burk som annars tog 0.2 sek per/miljoner iterationer (med 16 workerts) så tar detta 1,5 sek/miljoner iterationer, så det är långsamt, men testa detta.

Kod:
Time taken: 435.53 seconds
Avg. time: 1.5444 sec/million iterations
tips.txt skapad med 10000 rader!
Citera
2023-09-09, 12:13
  #188
Medlem
Citat:
Ursprungligen postat av Enterprise
Nja, tänkte om det var någon modul som var i fel version, men det känns som är Multiprocess-delen som spökar och den är inbyggd i Pythons stanrdardbibliotek så det borde inte var det.

Men kolla om du har rätt version av requests där, på min står det:
requests 2.31.0

Ett sista försök:
Testa att ändra max_num_of_workes på rad 24 i skriptet och kör igen:

Kod:
def main():
	
	max_num_of_workers = 1 # ändras för att ändra antalet parallella processer

På min Windows-burk som annars tog 0.2 sek per/miljoner iterationer (med 16 workerts) så tar detta 1,5 sek/miljoner iterationer, så det är långsamt, men testa detta.

Kod:
Time taken: 435.53 seconds
Avg. time: 1.5444 sec/million iterations
tips.txt skapad med 10000 rader!

Nä, ingenting nu heller och samma version av requests
Testade lite olika antal på rad 24, både 1 och 16 som verkar vara max hos mig också, så märkligt
Citera
2023-09-09, 12:14
  #189
Medlem
Enterprises avatar
Citat:
Ursprungligen postat av Mysadname
Nä, ingenting nu heller och samma version av requests
Testade lite olika antal på rad 24, både 1 och 16 som verkar vara max hos mig också, så märkligt
Och en sista fråga:
Har du testat med samma input som nedan?

Kod:
Spelform? 1= Stryktipset 2= Europatipset 3= Fullträff 3
Önskad summa (t.ex. 200.0) ? 200
Tolerabel +/- avvikelse decimaltal (t.ex. 0.05)? 0.001
Tryck 1 för text-fil och 2 för CSV-fil: 1
Citera
2023-09-09, 12:19
  #190
Medlem
Citat:
Ursprungligen postat av Enterprise
Och en sista fråga:
Har du testat med samma input som nedan?

Kod:
Spelform? 1= Stryktipset 2= Europatipset 3= Fullträff 3
Önskad summa (t.ex. 200.0) ? 200
Tolerabel +/- avvikelse decimaltal (t.ex. 0.05)? 0.001
Tryck 1 för text-fil och 2 för CSV-fil: 1

Japp, här är senaste körningen med workers ställd till 1:

Kod:
Spelform? 1= Stryktipset 2= Europatipset 3= Fullträff 3
Önskad summa (t.ex. 200.0) ? 200
Tolerabel +/- avvikelse decimaltal (t.ex. 0.05)? 0.001
Tryck 1 för text-fil och 2 för CSV-fil: 1
Fullträff omgång 50:
Default number of workers: 16
Length of chunks: 13061
Executor is using 1 workers
Traceback (most recent call last):

  Cell In[1], line 197
    main()

  Cell In[1], line 159 in main
    for chunk_result, chunk_tsts in executor.map(process_chunk, [start for start, end in chunks], [end for start, end in chunks], itertools.repeat(rowlist), itertools.repeat(pmin), itertools.repeat(pmax)):

  File ~\anaconda3\Lib\concurrent\futures\process.py:816 in map
    results = super().map(partial(_process_chunk, fn),

  File ~\anaconda3\Lib\concurrent\futures\_base.py:608 in map
    fs = [self.submit(fn, *args) for args in zip(*iterables)]

  File ~\anaconda3\Lib\concurrent\futures\_base.py:608 in <listcomp>
    fs = [self.submit(fn, *args) for args in zip(*iterables)]

  File ~\anaconda3\Lib\concurrent\futures\process.py:770 in submit
    raise BrokenProcessPool(self._broken)

BrokenProcessPool: A child process terminated abruptly, the process pool is not usable anymore

Har testat stryktipset också, men den kanske inte ska fungera med detta script ?
Citera
2023-09-09, 12:32
  #191
Medlem
Enterprises avatar
Citat:
Ursprungligen postat av Mysadname
Japp, här är senaste körningen med workers ställd till 1:
Prova att byta ut definitionen av process_chunk till följande:
Kod:
def process_chunk(start, end, rowlist, pmin, pmax):
	try:
		sub_gen = itertools.islice(itertools.product(*[enumerate(row) for row in rowlist]), start, end)
	except:
		print(f"Itertools failed at {start} - {end}")
		quit() 
	valid_combinations = []
	tss = 0
	for comb in sub_gen:
		tss += 1
		try:
			indices, values = zip(*comb)
		except:
			print(f"Zip failed at {start} - {end}")
			quit()
		s = sum(values)
		if pmin <= s <= pmax:
			valid_combinations.append(indices + (s,))
	return valid_combinations, tss

Du kan också pröva att ändra chunk_size (rad 157 i min kod) till något lägre, t.ex 500 000 eller 100 000 (men det bör vara delbart med 1 miljon)

Kod:
chunk_size = 500000  # You can adjust the chunk size
__________________
Senast redigerad av Enterprise 2023-09-09 kl. 12:42.
Citera
2023-09-09, 12:42
  #192
Medlem
Citat:
Ursprungligen postat av Enterprise
Prova att byta ut definitionen av process_chunk till följande:
Kod:
def process_chunk(start, end, rowlist, pmin, pmax):
	try:
		sub_gen = itertools.islice(itertools.product(*[enumerate(row) for row in rowlist]), start, end)
	except:
		print(f"Itertools failed at {start} - {end}")
		quit() 
	valid_combinations = []
	tss = 0
	for comb in sub_gen:
		tss += 1
		try:
			indices, values = zip(*comb)
		except:
			print(f"Zip failed at {start} - {end}")
			quit()
		s = sum(values)
		if pmin <= s <= pmax:
			valid_combinations.append(indices + (s,))
	return valid_combinations, tss

ingen skillnad, samma felmeddelande
Citera

Skapa ett konto eller logga in för att kommentera

Du måste vara medlem för att kunna kommentera

Skapa ett konto

Det är enkelt att registrera ett nytt konto

Bli medlem

Logga in

Har du redan ett konto? Logga in här

Logga in