Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在使用python并发线程池时设置最有效的工作线程数?_Python_Multithreading_Tensorflow_Core_Concurrent.futures - Fatal编程技术网

如何在使用python并发线程池时设置最有效的工作线程数?

如何在使用python并发线程池时设置最有效的工作线程数?,python,multithreading,tensorflow,core,concurrent.futures,Python,Multithreading,Tensorflow,Core,Concurrent.futures,当我在我的机器上看到/proc/cpuinfo文件(运行LinuxMint,如果这很重要的话),处理器的最后一个条目如下所示 processor : 11 vendor_id : AuthenticAMD cpu family : 23 model : 113 model name : AMD Ryzen 5 3600 6-Core Processor stepping : 0 microcode : 0x8701013 cpu MHz : 2224.1

当我在我的机器上看到/proc/cpuinfo文件(运行LinuxMint,如果这很重要的话),处理器的最后一个条目如下所示

processor   : 11
vendor_id   : AuthenticAMD
cpu family  : 23
model       : 113
model name  : AMD Ryzen 5 3600 6-Core Processor
stepping    : 0
microcode   : 0x8701013
cpu MHz     : 2224.122
cache size  : 512 KB
physical id : 0
siblings    : 12
core id     : 6
cpu cores   : 6
apicid      : 13
initial apicid  : 13
fpu     : yes
fpu_exception   : yes
cpuid level : 16
wp      : yes
flags       : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx mmxext fxsr_opt pdpe1gb rdtscp lm constant_tsc rep_good nopl nonstop_tsc cpuid extd_apicid aperfmperf pni pclmulqdq monitor ssse3 fma cx16 sse4_1 sse4_2 movbe popcnt aes xsave avx f16c rdrand lahf_lm cmp_legacy svm extapic cr8_legacy abm sse4a misalignsse 3dnowprefetch osvw ibs skinit wdt tce topoext perfctr_core perfctr_nb bpext perfctr_llc mwaitx cpb cat_l3 cdp_l3 hw_pstate sme ssbd mba sev ibpb stibp vmmcall fsgsbase bmi1 avx2 smep bmi2 cqm rdt_a rdseed adx smap clflushopt clwb sha_ni xsaveopt xsavec xgetbv1 xsaves cqm_llc cqm_occup_llc cqm_mbm_total cqm_mbm_local clzero irperf xsaveerptr wbnoinvd arat npt lbrv svm_lock nrip_save tsc_scale vmcb_clean flushbyasid decodeassists pausefilter pfthreshold avic v_vmsave_vmload vgif umip rdpid overflow_recov succor smca
bugs        : sysret_ss_attrs spectre_v1 spectre_v2 spec_store_bypass
bogomips    : 7186.62
TLB size    : 3072 4K pages
clflush size    : 64
cache_alignment : 64
address sizes   : 43 bits physical, 48 bits virtual
power management: ts ttp tm hwpstate cpb eff_freq_ro [13] [14]
看起来有12个处理器,每个处理器有6个内核

当我使用python concurrent.futures模块时,我像这样设置工人计数

import concurrent.futures    
with concurrent.futures.ThreadPoolExecutor(max_workers=os.cpu_count()) as executor:
        threadhandler = [executor.submit(model.predict, features) for features in feature_list]
        prediction_array = [thread.result() for thread in threadhandler]
这真的是最有效的max Worker数吗,即每个处理器一个?后来的一些阅读给我的印象是,整个进程在处理器上运行,但线程在处理器内的每个核心上运行。这是真的吗,或者从python开发人员的抽象级别来看,这更接近事实吗?那么,如何为每个核心分配一个线程呢

另外,model.predict方法(基于一些tensorflow模型)本身会产生多个子线程,形成一个层次结构吗?即使代码现在正在运行,我还是希望确认tensorflow中使用的线程是否会在更高级别上与我的线程冲突

最后,我对线程和进程的理解有一些差距,以及它是否与内核和处理器之间的区别相同。(每个进程占用一个处理器,每个线程占用处理器中的一个核心?)。作为一名数据科学家,我没有关于操作系统或硬件级机制的详细背景,如果有任何参考/链接能够用一些适合机器学习目的的高级抽象来澄清这一点,我将不胜感激