Модуль не поддерживает прекомпиляцию, но импортируется модулем, который - PullRequest
1 голос
/ 29 марта 2019

Я работаю с pmap и распределенными массивами в Julia, чтобы распараллелить код.При выполнении команды @everywhere include("./code.jl") выводится длинный список предупреждающих сообщений, и этот процесс занимает значительное время.Пакеты, которые находятся внутри файла code.jl, например:

using DataFrames
using Images

Я не уверен, как решить проблему missing from the cache

Это строка, котораязапустить

@everywhere include("./code.jl")

Я не ожидал, что список жалоб.Тем не менее, выходные данные похожи на это на всех рабочих:

From worker 2:  │ This may mean CategoricalArrays [324d7699-5711-5eae-9e2f-1d82baa6b597] does not support precompilation but is imported by a module that does.
      From worker 2:    └ @ Base loading.jl:947
      From worker 6:    ┌ Warning: Module CategoricalArrays with build ID 5344443537363826 is missing from the cache.
From worker 4:  ┌ Warning: Module DataFrames with build ID 5344463834994296 is missing from the cache.
      From worker 4:    │ This may mean DataFrames [a93c6f00-e57d-5684-b7b6-d8193f3e46c0] does not support precompilation but is imported by a module that does.
      From worker 4:    └ @ Base loading.jl:947
      From worker 2:    ┌ Warning: Module DataFrames with build ID 5344464953933087 is missing from the cache.
      From worker 2:    │ This may mean DataFrames [a93c6f00-e57d-5684-b7b6-d8193f3e46c0] does not support precompilation but is imported by a module that does.

Ответы [ 2 ]

1 голос
/ 29 марта 2019

Хотя @tholy ответ правильный - вам нужно будет помнить о перекомпиляции каждый раз, когда вы обновляете свои пакеты.

Еще один подход к борьбе с условием гонки - импортировать пакеты локально, а не в распределенной версии:

using DataFrames
@everywhere using DataFrames

Предполагая, что ваш файл импортирует только пакеты и определяет функции, которые вы можете попробовать:

include("./code.jl")
@everywhere include("./code.jl")

Это должно помочь, и вам не нужно не забывать перекомпилировать при обновлении некоторых пакетовиспользуется вашим приложением.

1 голос
/ 29 марта 2019

У вас может быть пакет, который требует перекомпиляции, и вы получаете состояние гонки, при котором все работники решают, что им нужно самостоятельно перекомпилировать его. Попробуйте запустить один сеанс julia и наберите ]precompile (] для входа в режим pkg). Как только это закончится, для безопасности вы можете попробовать using DataFrames просто чтобы убедиться, что это работает. Тогда попробуйте свой код выше.

...