我运行一个简单的多进程程序(下面的代码)。我只制作 2 个处理器,然后初始化一个队列来存储结果。
我想知道为什么名称相同q,但每次打印出不同的值。我知道队列存储 2 个返回值,来自pro1和pro2。但我预计,它是这样的:
q = [1,2]
Run Code Online (Sandbox Code Playgroud)
或者
q=[2,1] #depend on which one runs first
Run Code Online (Sandbox Code Playgroud)
我无法弄清楚一个变量如何q可以是 1 或 2。
这让我很困惑。谢谢。
代码:
import multiprocessing
def run(ID, q):
print("Starting thread %s " % (ID))
q.put(ID)
return None
if __name__ == '__main__':
q = multiprocessing.Queue() #store the result
pro1 = multiprocessing.Process(target=run, args=(1,q))
pro2 = multiprocessing.Process(target=run, args=(2,q))
pro1.start()
pro2.start()
pro1.join()
pro2.join()
print("q is ", q.get())
print("another q is ", q.get())
Run Code Online (Sandbox Code Playgroud)
结果:
Starting thread …Run Code Online (Sandbox Code Playgroud) 我是 PySpark 的新手,我正在尝试在我的本地计算机上使用pySpark(版本 2.3.1)和Jupyter-Notebook。
我想设置spark.driver.memory通过这样做是为了9GB:
spark = SparkSession.builder \
.master("local[2]") \
.appName("test") \
.config("spark.driver.memory", "9g")\
.getOrCreate()
sc = spark.sparkContext
from pyspark.sql import SQLContext
sqlContext = SQLContext(sc)
spark.sparkContext._conf.getAll() # check the config
Run Code Online (Sandbox Code Playgroud)
它返回
[('spark.driver.memory', '9g'),
('spark.driver.cores', '4'),
('spark.rdd.compress', 'True'),
('spark.driver.port', '15611'),
('spark.serializer.objectStreamReset', '100'),
('spark.app.name', 'test'),
('spark.executor.id', 'driver'),
('spark.submit.deployMode', 'client'),
('spark.ui.showConsoleProgress', 'true'),
('spark.master', 'local[2]'),
('spark.app.id', 'local-xyz'),
('spark.driver.host', '0.0.0.0')]
Run Code Online (Sandbox Code Playgroud)
这很奇怪,因为当我查看文档时,它表明
注意:在客户端模式下,此配置不能直接在您的应用程序中通过 SparkConf设置,因为驱动程序 JVM 已经在此时启动。相反,请通过 --driver-memory 命令行选项或在您的默认属性文件中进行设置。文档在这里
但是,正如您在上面的结果中看到的,它返回
[('spark.driver.memory', '9g')
即使我访问 …